log4j用DailyRollingFileAppender出现的诡异的问题
以下是用到的jar包(无重复的jar)和log4j的配置:log4j-1.2.15
slf4j-api-1.7.2
sl4j-log4j12-1.7.2
<appender name="filelog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="debug"/>
<param name="File" value="/opt/logs/filelog.log"/>
<param name="Append" value="true"/>
<param name="ImmediateFlush" value="false"/>
<param name="BufferedIO" value="true"/>
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<param name="BufferSize" value="8192"/>
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%c] [%t] - %m%n" />
</layout>
</appender>
现象:
比如是10月2号的日志,
log4j的日志有很大一部分写入到/opt/logs/fielog.log.2013-10-01.log文件里面
也就是说总是保存在昨天的日志文件中。哪位大侠遇到过这种情况,不知道怎么解决的
log4j DailyRollingFile --------------------编程问答-------------------- 基本无解,最后放弃DailyRolling的模式。
原因是每次到切换日期的时候,写日志的压力非常大。无论怎么操作,都会引用到前一日的那个文件。
在高并发的情况下,用java的API写文件就出现这个问题,可以复现。
用了各种方法,完美解决没有做到,不过当时没有尝试nio, jni。
加了个消息缓冲机制,能够实现。
而且还实现了一个比log4j效率还高很多的日志类.
不过最后项目里面没有用,因为担心万一有别的bug,哈哈。
补充:Java , Java EE