Log4j - 在负载很重的情况下丢失压缩文件中的日志

时间:2013-09-09 07:43:26

标签: java logging log4j

我们遇到了大量日志记录下log4j日志记录的问题。 我们会定期错过文件中的一些日志(每1小时约4-20分钟),这些日志将被推出并压缩。

配置:

<appender name="MY_LOG" class="org.apache.log4j.appender.TimeAndSizeRollingAppender">
    <param name="File"   value="../logs/mylog.log" />
    <param name="DatePattern" value=".yyyy-MM-dd"/>
    <param name="MaxFileSize" value="40MB"/>
    <param name="MaxRollFileCount" value="100"/>
    <param name="ScavengeInterval" value="300000"/>
    <param name="encoding" value="UTF-8" />
    <param name="CompressionAlgorithm" value="ZIP"/>
    <param name="CompressionMinQueueSize" value="5"/>
    <param name="CompressionThreadPriority" value="1"/>
    <param name="CompressionLevel" value="1"/>
    <param name="CompressionUseBlockingQueue" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p %22.22t| %22.22c{1}| %m%n"/>
    </layout>
</appender>

添加了属性<param name="CompressionUseBlockingQueue" value="true"/>以防止日志丢失。我们认为(并且我们仍然这样做)日志会丢失,而文件(当有5个临时文件时)被合并和压缩。他们可能会以某种方式被覆盖。但是,这个属性不起作用。

我不确定在哪里寻找问题,或者如何更改配置,因此日志不会丢失或被覆盖。

我们可能会尝试什么建议?

由于

1 个答案:

答案 0 :(得分:1)

您可以尝试将日志副本创建到某个临时位置(如果空间不是约束,则可以在同一位置);然后拉链。

可能会发生压缩时间点正在发生的情况,记录器缓冲区正在尝试进行反向操作。由于log4j无声地失败,因此很难跟踪此类错误。