我已经配置了以下配置的log4j2,但是TimeBasedTriggeringPolicy不起作用,我在较旧的日志中获得了新的日志,请您提供帮助。它的大小正常滚动,并且还创建了任何数量的文件,因为我为DefaultrolloverStrategy指定了" nomax"属性,因此只有TimeBasedTriggeringPolicy无法正常工作。它在前一天的日志文件中写下了一天的日志。它确实创建了具有最新日期的新日志文件,但是有些日志已登录到前一天的日志。我不知道可以正确命名文件时会遇到问题。
{
"Configuration": {
"Properties": {
"Property": [
{
"name": "application",
"value": "myapp"
}
]
},
"Appenders": {
"Console": {
"name": "Console-Appender",
"target": "SYSTEM_OUT",
"PatternLayout": {
"pattern": "%d{yyyy-MM-dd HH:mm:ss,SSS} ${application} %-5level %marker %t %c{5} %msg%n"
},
"ThresholdFilter": { "level": "error" }
},
"RollingFile": [
{
"name": "File-Appender",
"fileName":"${sys:log.path}/${application}.log",
"filePattern":"${sys:log.path}/${application}-%d{yyyy-MM-dd}-%i.log",
"PatternLayout": {
"pattern": "%d{yyyy-MM-dd HH:mm:ss,SSS} ${application} %-5level %marker %t %c{5} %msg%n"
},
"Policies": {
"TimeBasedTriggeringPolicy": {"interval":"1", "modulate":"true" },
"SizeBasedTriggeringPolicy": { "size": "5 KB" }
},
"DefaultRolloverStrategy": {"fileIndex":"nomax"}
}
]
},
"loggers": {
"logger":{
"name": "com.mycompany",
"level": "${sys:log.level}",
"AppenderRef": { "ref": "File-Appender"}
},
"root": {
"level": "error",
"AppenderRef": { "ref": "Console-Appender" }
}
}
}
}
添加:
"OnStartupTriggeringPolicy": {"minSize":"0"}
政策解决了问题。
来自log4j2文档:
,如果日志文件比当前的JVM的开始时间且最小文件大小满足或超过当前的JVM,则onstartupTriggeringPolicy策略会导致翻转。
。onstartuptriggeringpolicy参数:
lemsize:long:文件必须翻滚的最小尺寸。无论文件大小如何,零的大小都会导致滚动。默认值为1,它将阻止在空文件上滚动
CronTriggeringPolicy
怎么样?这将在每天凌晨12点为您触发翻滚:
{"CronTriggeringPolicy": {"schedule": "0 0 0,12 * * ?"}
这样,它不会依赖文件模式,并且绝对应该按照您的cron
间隔滚动日志。我也不知道您是如何确定前几天日志中包含在翻转中的,但是请确保您的系统时间是同步的。