我已经使用以下配置配置了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" }
}
}
}
}
CronTriggeringPolicy
怎么样?这将在每天凌晨12点为您触发翻转:
{"CronTriggeringPolicy": {"schedule": "0 0 0,12 * * ?"}
这样,它将不依赖于文件模式,并且应该按照cron
间隔滚动日志。我也不知道您如何确定前一天的日志包含在翻转中,但请确保您的系统时间是同步的。
添加:
"OnStartupTriggeringPolicy": {"minSize":"0"}
政策解决了问题。
从log4j2文档:OnStartup触发策略如果日志文件早于当前JVM的开始时间且达到或超过最小文件大小,则OnStartupTriggeringPolicy策略将导致翻转。 OnStartupTriggeringPolicy参数:minSize:long:文件必须翻转的最小大小。无论文件大小是多少,大小为零都会导致翻转。默认值为1,这将阻止滚动空文件