我一直在研究这个问题,但到目前为止,还没有发现一个有相同(甚至类似)问题的问题。
问题不在于“如何配置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触发),每晚执行两个滚动文件:
通用功能
被创建,包含了那天的所有日志。日志是完整的,我们很高兴。
几天前,我们注意到日志正在丢失:显然,即使第一次回滚(在午夜)会成功,系统也会再次回滚。每天上午10:30的批处理执行都会(再次)触发(当前)日志的滚动。
这导致包含当天所有日志的日期为前一天的文件被当天前十个半小时的日志覆盖。结果:日志在前一天的日志文件中,我们每天只有大约10小时的日志,而不是24小时。
在调查过程中,我注意到我忘记了functionallog配置上的datepattern,所以我添加了以下内容:
log4j.appender.functionalLog.DatePattern='.'yyyy-MM-dd
现在,我知道可以将滚动设置为每年、每月、每天、每小时、每分钟,…,但由于某些原因,每天(上午10:30)都有一些执行,使其再次滚动。log4j和批处理中都没有可以解释这一点的配置。
部署的代码、log4j配置和服务器的配置都没有变化。
以前有人遇到过这样的问题吗?配置中有什么可以避免的吗?
1条答案
按热度按时间6jjcrrmo1#
结果发现问题并不像crontab或log4j配置那样严重。
显然,服务器上的一个问题导致有两个进程写入日志文件。我们仍然没有弄清楚是什么导致了它,但是杀死第二个进程解决了我们的问题。