【问题标题】:Rollover the logfile everyday irrespective if any messages is getting logged or not每天滚动日志文件,无论是否记录了任何消息
【发布时间】:2014-04-11 08:51:12
【问题描述】:

我的 log4j.properties 中有以下配置

log4j.rootLogger=ERROR,FA
log4j.appender.FA=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.FA.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.FA.RollingPolicy.FileNamePattern=.\\logs\\app.log-%d{dd-MM-yyyy}
log4j.appender.FA.File=.\\logs\\app.log
log4j.appender.FA.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.FA.layout.ConversionPattern=%d %p %t %c: %m%n
log4j.appender.FA.Append=true

有几天没有报告错误,并且文件在接下来的连续几天没有滚动,直到报告下一个错误。 由于 appender 设置为 ERROR 级别,因此在报告一些错误消息之前它不会滚动日志文件。

我的问题是我们可以开发一些机制,以便文件将在每个午夜滚动,而不管 appender 是否有一些错误消息要记录?

我有一个 java 应用程序,我们正在使用 log4j api 进行日志记录,因此 Java 或 Log4j 中的解决方案都将不胜感激。

提前致谢

注意:- 由于大小限制,我无法将记录器级别设置为 Info/Debug

【问题讨论】:

  • 所以你想要在没有任何事情发生的日子里清空日志文件?
  • 不幸的是..这是要求。实际上,我们将昨天的日志发送到另一个系统,它期望 app.log.dd-MM-yyyy 中的 logFileName 并且他们每天都想要它(如果某个特定日期丢失了文件,那么它会引发错误)。
  • 我不确定 Log4j 可以做到这一点。你用什么来发送文件?如果文件丢失,该系统是否无法创建文件?
  • 基本上是客户要求查看日志。所以他们开发了一些代码(我们真的不知道),我们正在通过电子邮件向他们发送文件。

标签: java logging log4j rollingfileappender


【解决方案1】:

使用 Log4j 2.5 中的新 CronTriggeringPolicy,我找到了一个没有虚拟行的解决方案,我发布了 here。不幸的是,它仍然需要一些自定义插件代码,因为DefaultRolloverStrategy 的行为是简单地删除空文件。

【讨论】:

    【解决方案2】:

    由于不翻转空文件是 log4j 行为,我们必须使用以下方法

    1. 编写了一个线程并将其安排为 12 小时,其中记录了虚拟语句“这是一条虚拟消息”
    2. 由于文件现在不是空的,因此 log4j 负责翻转

    并且我们每天发送日志文件,我们决定在每 12 小时后记录一个虚拟语句,说“这是一条虚拟消息”,这样就解决了翻转问题。

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 1970-01-01
      • 2016-04-10
      • 2017-05-14
      • 2010-09-13
      • 2013-05-14
      • 2020-06-26
      • 1970-01-01
      • 2017-11-09
      相关资源
      最近更新 更多