【问题标题】:Filename rolled files in log4jlog4j 中的文件名滚动文件
【发布时间】:2011-08-19 04:38:09
【问题描述】:

在当前情况下,日志文件基于 10MB 的最大文件大小滚动。滚动文件的文件名例如是“SystemOut_Debug.log.1”。

问题在于这些滚动日志文件的文件名。我们想要的是文件滚动时的当前日期和时间戳。例如“SystemOut_Debug.20110505.104500.log”

我们如何才能意识到这一点?

非常感谢

【问题讨论】:

标签: java log4j


【解决方案1】:

改用 DailyRollingFileAppender,例如

<appender name="log" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="/srv/logs/myprogram.log" />
    <param name="Append" value="true" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n" />
    </layout>
</appender>

DatePattern 可用于每小时轮换一次,例如使用

<param name="DatePattern" value="'.'hh" />

每小时有一个文件,每 24 小时覆盖一次。

【讨论】:

  • 如果您需要精确旋转 10 MB,您可以从 DailyRollingFileAppender 派生您自己的 Appender 类,但我相信在大多数情况下这不值得。
  • 我们与客户进行了交谈,他要求日志文件仅在 10MB 时滚动,而不是因为经过了一定时间。除了该文件名必须包含整个日期和时间戳。
  • 我的理解是,实现这一点的唯一可能就是扩展 RollingFileAppender 类并实现这个功能?
  • 我还没有测试它,但也许在 RollingFileAppender 中覆盖 'public String getFile()' 以每次返回不同的文件名就足够了。但是由于每个文件名都不同,如果您不跟踪旧文件,所有文件都将永远存在。使用 cron 作业或计划任务一段时间后删除它们(DailyRolling 和完整日期也存在同样的问题)。
  • 遗憾的是,我没有时间(目前)来准确分析扩展类中必须执行哪些代码更改。希望我能尽快对此进行进一步分析。我会回来的。
【解决方案2】:

DailyRollingFileAppender 正是您要搜索的内容。

<appender name="roll" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="application.log" />
    <param name="DatePattern" value=".yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" 
          value="%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n  %-5p %m%n"/>
    </layout>
  </appender>

【讨论】:

猜你喜欢
  • 2014-12-21
  • 2015-06-02
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 2016-09-28
  • 2010-09-10
相关资源
最近更新 更多