问题描述
最近有个系统使用的是log4j输出日志,并发比较高的时候,日志输入量大导致系统处理性能降低。后考虑使用log4j异步输出的方式进行日志输出,结果发现日志中输出的类名(%C{4})和方法名(%M)及行号(%L)是问号。
<appender name="LOGFILE_DAY" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="E:/logs/system.log" />
<param name="Encoding" value="GBK" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%C{4}.%M,%L]-[%m]" />
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="512" />
<appender-ref ref="LOGFILE_DAY" />
</appender>
解决方法
最后查看log4j的源码:org.apache.log4j.AsyncAppender发现有一个参数:locationInfo,最后把这个参数设置上即可:
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="512" />
<param name="LocationInfo" value="true"/>
<appender-ref ref="LOGFILE_DAY" />
</appender>