在項目中使用了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中進行配置。 后面有時間再研究下是個什么原因。