天天看點

log4jdbc 與 logback 集合列印日志過多的解決

在項目中使用了log4jdbc,可以很友善的把sql的參數也列印出來,便于問題調試。比如原始sql: select * from t_order where order_id = ? ; 經過log4jdbc的處理後就變成了 select * from t_order where order_id = 123。 但是經過這個處理以後,預設會列印sql相關的很多資訊,比如連接配接、執行時間、參數綁定、結果等資訊, 會使日志列印迅速膨脹,我這裡服務調用比較頻繁,有兩個定時任務在調用服務,日志每天在50G左右。于是在 log4jdbc.properties 進行了相關配置,但是沒有什麼效果。 後來在logback.xml 增加了如下配置:

<logger name="jdbc.sqlonly" level="ERROR">
        <appender-ref ref="rollingFile"/>
    </logger>
    <logger name="jdbc.audit" level="ERROR">
        <appender-ref ref="rollingFile"/>
    </logger>
    <logger name="jdbc.resultset" level="ERROR">
        <appender-ref ref="rollingFile"/>
    </logger>
    <logger name="jdbc.connection" level="ERROR">
        <appender-ref ref="rollingFile"/>
    </logger>      

将jdbc.only, jdbc.audit, jdbc.resultset, jdbc.connection 的列印級别設定為ERROR, 減少了這部分的列印,大家可根據自己的需求進行配置級别。經過優化後每天在1G以内。

附log4jdbc.properties的配置如下:

log4j.logger.jdbc.sqlonly=DEBUG,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
log4j.logger.jdbc.sqltiming=DEBUG,console
log4j.logger.jdbc.connection=DEBUG,console      

曾嘗試在以上檔案中修改DEBUG為ERROR、OFF 都無效。 猜想是因為logback接管了log的輸出配置,是以必須在logback中進行配置。 後面有時間再研究下是個什麼原因。

繼續閱讀