【问题标题】:Unable to open log4j compressed files using winzip无法使用 winzip 打开 log4j 压缩文件
【发布时间】:2014-05-26 13:12:32
【问题描述】:

参考这里的帖子后,我能够成功配置为使用 log4j extras jar 并创建一个压缩日志文件。但是,当我打开压缩文件时,它会抛出一个错误,表明它是一个无效的 zip 文件。下面是我的 log4j 配置。如您所见,我试图每分钟创建一个日志文件并将其压缩。我在这个配置文件中做错了吗?请指教。

<appender name="EventLogger" class="org.apache.log4j.rolling.RollingFileAppender">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
    <param name="ActiveFileName" value="C:/EventLogs/log" />
    <param name="FileNamePattern" value="C:/EventLogs/log%d{yyyy-MM-dd-HH-mm}.zip" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss.SSS}\t%m%n" />
</layout>
</appender>

编辑:发现文件可以使用winrar打开/解压,但不能使用winzip

【问题讨论】:

    标签: java log4j rollingfileappender


    【解决方案1】:

    也许根本原因不同,但我的原因很相似 - 我的文件正在按照我的 TimeBasedRollingPolicy 滚动,但是当我尝试打开它们时,我收到错误,指出它们是无效的 zip 文件。

    原来它们根本没有拉上拉链。这些文件已根据 FileNamePattern 重命名为 *.zip,但未进行压缩。

    在log4j源代码TimeBasedRollingPolicy.java中,我们看到:

    ...

    if (lastFileName.endsWith(".gz")) {
      suffixLength = 3;
    } else if (lastFileName.endsWith(".zip")) {
      suffixLength = 4;
    }
    

    ...

    if (suffixLength == 4) {
        compressAction =
        new ZipCompressAction(
          new File(lastBaseName), new File(lastFileName), true);
    }
    

    ...

    我的 log4j.properties 文件在 FileNamePattern 中的 .zip 后面有尾随空格,因此长度既不是 3 也不是 4。

    我对 log4j extras 团队的建议是:

    • 在文件名上使用 trim()
    • 不要重命名为例如zip 除非实际发生压缩

    【讨论】:

    • 有趣的一个。在我的案例中创建的文件已经被压缩。好吧,正如你所说,根本原因并不相似,但这是需要注意的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    相关资源
    最近更新 更多