轮换时日志文件损坏

时间:2015-05-28 05:32:12

标签: log4j

我正在使用lo4j.xml配置文件 -

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
    xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} %-5p %C - %m%n" />
        </layout>
    </appender>



    <appender name="Daily-ROLL-Metric" class="org.apache.log4j.rolling.RollingFileAppender">
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern"
                value="C:/logs/metric.log.%d{yyyy-MM-dd}.gz" />
            <param name="ActiveFileName" value="C:/logs/metric.log" />
        </rollingPolicy>

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p (%F:%L) - %m%n" />
        </layout>
    </appender>


    <logger
        name="com.tieto.teco.cloudmonitor.mq.listener.SiteScopeMetricsHandler"
        additivity="false">
        <level value="debug" />
        <appender-ref ref="Daily-ROLL-Metric" />
    </logger>

    <root>
        <level value="info" />
        <appender-ref ref="Daily-ROLL" />
        <appender-ref ref="console" />
    </root>


</log4j:configuration>

第一次正确创建文件,但在第二天文件的旋转中,一些损坏的数据被插入文件中。 如果我使用 “vi file”命令显示^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @字符。

如果我使用sed命令显示第5行文件 sed -n 1,5p文件名 它不起作用

当我排除第一行时,它会显示正确的日志数据 sed -n 2,5p文件名

看来,一些二进制数据在旋转时插入到文件的第一行

需要帮助来解决问题。

1 个答案:

答案 0 :(得分:1)

我太闯入了这个。我尝试设置属性 append =&#34; true&#34; ,它确实解决了我的问题。

    ...
    ...
    <appender name="Daily-ROLL-Metric" class="org.apache.log4j.rolling.RollingFileAppender" append="true">
    ...
    ...

供你参考,我的appender看起来像:

<Appenders>

    <RollingFile name="ROLL-FILE" fileName="logfilename"
                 filePattern="logs/application-%d{yyyy-MM-dd}-%i.log"
                 immediateFlush="false" append="true">
        <PatternLayout pattern="%-5p | %d{yyyy-MM-dd HH:mm:ss} | [%t] %C (%F:%L) - %X{unique-id} - %m%n"/>
        <Policies>
            <SizeBasedTriggeringPolicy size="20 MB"/>
        </Policies>
    </RollingFile>

</Appenders>