【问题标题】:log4j disable rolling create files based on sizelog4j 禁用基于大小的滚动创建文件
【发布时间】:2012-06-10 08:49:06
【问题描述】:

我试图找到一个现成的 jar/class,让我可以选择 启用 log4j 根据文件大小无休止地写入文件,我的意思是: 将 log4j 配置为: 1. 写入日志文件,直到文件大小为 10 兆 2.当文件达到10兆时,它将被重命名为“file_”+当前日期后缀,就是这样。 3.开始新的日志文件转到1

每次文件达到 10240KB 时,它会将文件 engine.log 重命名为 engine_1.log
然后当 main engine.log 再次达到 10240KB
它将engine_1.log 重命名为engine_2.log
和 engine.log 到 engine_1.log 等等..
这是我喜欢避免的行为!
例如它引起的问题:
因此,如果我查看 engine_1.log 中的内容,并且 10 分钟后,同一文件中的内容将被更改

我只想简单地写入日志,而无需每次都重命名文件。 我希望我说清楚了。

【问题讨论】:

  • 您可以在配置文件中编辑 log4j 附加程序,但您需要以编程方式执行此操作吗?只是想了解您的要求。
  • 不是以编程方式,我就是 log4j 只是根据大小限制写入文件/日志。所以如果我定义每个日志时它等于 10 兆新日志文件将被启动

标签: log4j


【解决方案1】:

使用标准 Log4j 库无法实现这一点,但它在 Log4j Extras Companion 库中实现,这是一个单独的 JAR 文件,可以下载 from here

标准RollingFileAppender 根据日志文件大小执行日志轮换(或滚动)。如果日志文件达到指定的大小限制,则会启动一个新的日志文件并将旧的日志文件重命名为具有_1 后缀。现有存档日志也将使用_2_3 等后缀进行轮换。

您需要覆盖此默认日志文件命名策略,以在存档日志文件名中使用当前日期而不是计数器。这可以使用 TimeBasedRollingPolicy 过滤器 (here is the documentation) 进行配置。

修改您的 Log4J 配置文件 (log4j.xml):

<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="Threshold" value="DEBUG"/>   
    <param name="File" value="engine.log"/>
    <param name="Append" value="true"/>
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" value="engine_%d.log" />
    </rollingPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %t %-5p [%c{1}] %m%n "/>
    </layout>
</appender>

我从official Log4J wiki 获取了这个示例配置(请参阅页面底部的过滤器配置更多示例部分)。

更新:

extras 库中的RollingFileAppender 类没有像旧的RollingFileAppender 那样设置最大日志文件大小的适当属性。可以使用触发策略指定此属性,在这种情况下应使用SizeBasedTriggeringPolicy(文档is here)。触发策略的配置与滚动策略相同(我只展示了相关部分):

<appender ...>
    ...
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
        <param name="MaxFileSize" value="10000000" />
    </triggeringPolicy>
    ...
</appender>

【讨论】:

  • 谢谢,但我在哪里定义文件大小?以及文件命名应该如何?
  • 我虽然你想禁用滚动(这是你问题的标题)。请说清楚:您想启用基于文件大小、基于文件日期的滚动还是完全禁用滚动?一切皆有可能,只需说出您真正想要什么。
  • @user63898:现在更清楚了,我修改了答案,希望对您有所帮助。
  • 我正在使用 log4j-1.2.13.jar 和 apache-log4j-extras-1.1.jar:log4j:WARN 在 org.apache.log4j.rolling.RollingFileAppender 中没有这样的属性 [maxFileSize]。 log4j:WARN 在 org.apache.log4j.rolling.RollingFileAppender 中没有这样的属性 [maxBackupIndex]。
  • 我犯了一个错误,你应该使用org.apache.log4j.rolling.RollingFileAppender而不是org.apache.log4j.RollingFileAppender,但是这个类没有maxFileSizemaxbackupIndex属性。从配置文件中删除 thos。
猜你喜欢
  • 2015-03-20
  • 2014-12-08
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多