log4j DailyRollingFileAppender 滚动两次
log4j DailyRollingFileAppender rolls two times
我一直在研究这个问题,我遇到了一些问题,但到目前为止还没有发现一个具有相同(甚至相似)问题的问题。
问题不在 'how to configure the RollingFileAppender'。它被配置了,它实际上正在滚动。到目前为止一切顺利。
上下文是,每天,每 15 分钟,我们执行一个批处理,我们将输出写入两个不同的日志文件:
- 一个通用日志文件,包含所有输出
- 功能日志,仅包含与分析师相关的那部分输出。
配置如下:
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 的批处理执行将(再次)触发(当前)日志滚动。
这导致包含当天所有日志的前一天的日期文件被当天前十个半小时的日志覆盖。
结果:日志在前一天的日志文件中,我们每天只有大约十个小时的日志,而不是 24。
在调查过程中,我注意到我忘记了 FunctionalLog 配置中的 DatePattern,所以我添加了这个:
log4j.appender.functionalLog.DatePattern='.'yyyy-MM-dd
现在,我知道可以将滚动设置为每年、每月、每天、每小时、每分钟...,但由于某种原因,每天(上午 10 点 30 分)都会执行一些操作再次翻身。 log4j 和批处理中都没有配置可以解释这一点。
部署的代码、log4j 配置和服务器配置都没有变化。
有没有人遇到过这样的问题?我们可以在配置中做些什么来避免这种情况?
原来问题不在于 crontab 或 log4j 配置。
显然是服务器上的问题导致有两个进程写入日志文件。我们仍然没有弄清楚是什么原因造成的,但是终止第二个进程解决了我们的问题。
我一直在研究这个问题,我遇到了一些问题,但到目前为止还没有发现一个具有相同(甚至相似)问题的问题。
问题不在 'how to configure the RollingFileAppender'。它被配置了,它实际上正在滚动。到目前为止一切顺利。
上下文是,每天,每 15 分钟,我们执行一个批处理,我们将输出写入两个不同的日志文件:
- 一个通用日志文件,包含所有输出
- 功能日志,仅包含与分析师相关的那部分输出。
配置如下:
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 的批处理执行将(再次)触发(当前)日志滚动。
这导致包含当天所有日志的前一天的日期文件被当天前十个半小时的日志覆盖。 结果:日志在前一天的日志文件中,我们每天只有大约十个小时的日志,而不是 24。
在调查过程中,我注意到我忘记了 FunctionalLog 配置中的 DatePattern,所以我添加了这个:
log4j.appender.functionalLog.DatePattern='.'yyyy-MM-dd
现在,我知道可以将滚动设置为每年、每月、每天、每小时、每分钟...,但由于某种原因,每天(上午 10 点 30 分)都会执行一些操作再次翻身。 log4j 和批处理中都没有配置可以解释这一点。
部署的代码、log4j 配置和服务器配置都没有变化。
有没有人遇到过这样的问题?我们可以在配置中做些什么来避免这种情况?
原来问题不在于 crontab 或 log4j 配置。
显然是服务器上的问题导致有两个进程写入日志文件。我们仍然没有弄清楚是什么原因造成的,但是终止第二个进程解决了我们的问题。