当前位置:编程学习 > JAVA >>

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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,