【问题标题】:log4j DailyRollingFileAppender rolls two timeslog4j DailyRollingFileAppender 滚动两次
【发布时间】:2021-03-08 04:31:27
【问题描述】:

我一直在研究这个问题,我遇到了一些问题,但到目前为止还没有找到一个有相同(或什至类似)问题的问题。

问题不在于“如何配置 RollingFileAppender”。它被配置了,它实际上是在滚动。到目前为止一切顺利。

上下文是,每天,每 15 分钟,我们执行一个批处理,其中我们将输出写入两个不同的日志文件:

  1. 一个通用日志文件,包含所有输出
  2. 功能日志,仅包含与分析人员相关的那部分输出。

配置如下:

log4j.rootLogger = info, rollingFile, functionalLog

log4j.appender.rollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.rollingFile.File= ../logs/general_log.log
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%p %d %t %c - %m%n
log4j.appender.rollingFile.DatePattern='.'yyyy-MM-dd

log4j.appender.functionalLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.functionalLog.File= ../logs/functional_log.log
log4j.appender.functionalLog.layout=org.apache.log4j.PatternLayout
log4j.appender.functionalLog.layout.ConversionPattern=%m - %d%n
log4j.appender.functionalLog.filter.1=org.apache.log4j.varia.StringMatchFilter
log4j.appender.functionalLog.filter.1.StringToMatch=FUNC-LOG -
log4j.appender.functionalLog.filter.1.AcceptOnMatch=true
log4j.appender.functionalLog.filter.2=org.apache.log4j.varia.DenyAllFilter

这个配置已经工作了几个月。批处理每 15 分钟执行一次(由 crontab 触发),每晚执行两个翻转文件:

general_log.log.2020-05-18 function_log.log.2020-05-18

已创建,包含该特定日期的所有日志记录。日志很完整,我们很高兴。

几天前,我们注意到我们正在丢失日志:显然,即使第一次翻转(在午夜)成功,系统也会第二次翻转。每天上午 10.30 的批处理执行将(再次)触发(当前)日志滚动。

这导致前一天的日期文件(包含当天的所有日志)被当天前十个半小时的日志覆盖。 结果:日志在前一天的日志文件中,我们每天只有大约 10 小时的日志,而不是 24 小时。

在调查过程中,我注意到我忘记了 FunctionalLog 配置中的 DatePattern,所以我添加了这个:

log4j.appender.functionalLog.DatePattern='.'yyyy-MM-dd

现在,我知道可以将翻转设置为每年、每月、每天、每小时、每分钟……,但由于某种原因,每天(上午 10.30 点)都有一些执行会使其翻转再次。 log4j 和批处理中没有配置可以解释这一点。

部署的代码、log4j 配置和服务器的配置都没有变化。

以前有没有人遇到过这样的问题?配置中有什么我们可以做的来避免这种情况吗?

【问题讨论】:

  • 所以有些事情发生了变化。 log4j 是否为日志文件使用默认的最大大小,这可能已经达到了?
  • @jr593 实际上,除了行为,以及我在发现问题后在配置中所做的更改......没有任何改变。这就是为什么我们找不到可能导致它的原因。 Afaik,没有真正的“最大尺寸”,如果有,我们还没有达到。对于同一台服务器上的其他项目,我们有 100 倍或更多大小的日志,这没有问题。一般日志(在忙碌的一天)的日志只有 +-2 到 3 mb,而功能日志则小于 200 kb
  • 我以为后台使用的JRE可能更新了,但我查了一下,也不是这样。

标签: java configuration log4j


【解决方案1】:

原来问题不在于 crontab 或 log4j 配置。

显然服务器上的一个问题导致有两个进程写入日志文件。我们还没有弄清楚是什么原因造成的,但是杀死第二个进程解决了我们的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多