Xav*_*uza 6 java logging log4j log4j2
我正在使用 RollingFile 附加程序。我希望日志文件每 20 分钟滚动一次,无论日志记录事件如何。例如,在一小时内我应该有 3 个日志文件,即使在那一小时内可能没有任何日志记录。使用 Log4j2 可以吗?如果是,请提供所需的配置(在 log4j2.xml 中)。以下配置似乎不起作用:
<RollingFile name="RECHARGE_NMCD" fileName="D:/rc_nmcd/rc_nmcd.log" append="true" bufferedIO="false" filePattern="D:/rc_nmcd/rc_nmcd_%d{yyyy-MM-dd-HH-mm}.process">
<PatternLayout>
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="20"/>
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
Run Code Online (Sandbox Code Playgroud)
将第二个单元的filePattern 更改为 %d{yyyy-MM-dd_HH-mm- ss }
\n%d{yyyy-MM-dd_HH- mm } 为分钟单位
\n%d{yyyy-MM-dd_ HH } 为小时单位
\n%d{yyyy-MM- dd } 是天单位
\nlog4j2.xml:
\n<?xml version="1.0" encoding="UTF-8"?>\n<Configuration status="WARN" >\n <Properties>\n <Property name="LOG_PATTERN_7">%d{yyyy/MM/dd HH:mm:ss.SSS} [%-6p] %c.%M(%F:%L) \xe2\x80\x93 %m%n</Property>\n </Properties>\n\n <Appenders>\n <RollingFile name="RollingFile" fileName="logs/app.log" \n filePattern="logs/$${date:yyyy-MM-dd}/${env:APP_NAME:-app}-%d{yyyy-MM-dd_HH-mm}_%i.log.zip">\n <PatternLayout pattern="${LOG_PATTERN_7}" />\n <Policies>\n <!-- filePattern %d{yyyy-MM-dd_HH-mm-ss}: interval = 20 second -->\n <!-- filePattern %d{yyyy-MM-dd_HH-mm}: interval = 20 minutes -->\n <!-- filePattern %d{yyyy-MM-dd_HH}: interval = 20 hours -->\n <TimeBasedTriggeringPolicy interval="20" modulate="true"/>\n </Policies>\n <DefaultRolloverStrategy max="1000" />\n </RollingFile>\n\n <Console name="Console" target="SYSTEM_OUT" follow="true">\n <PatternLayout pattern="${LOG_PATTERN_7}" />\n </Console>\n </Appenders>\n\n <Loggers>\n <Root level="all" includeLocation="true">\n <AppenderRef ref="Console" />\n <AppenderRef ref="RollingFile" />\n </Root>\n </Loggers>\n\n</Configuration>\nRun Code Online (Sandbox Code Playgroud)\n
我提到了这个插件https://github.com/mushkevych/log4j2plugin
我每个 FTimeBasedTriggeringPolicy 有一个可运行线程,它实际上会休眠到下一次翻转,而不是 LogRotateThread 休眠一些不确定的指定时间。
Thread rotateThread = new Thread(new LogRotateRunnable(this));
rotateThread.start();
Run Code Online (Sandbox Code Playgroud)
初始化后添加上述内容(RollingFileManager)
日志旋转可运行:
while (true) {
long sleepTime = fTimeBasedTriggeringPolicy.getNextRollover()
- System.currentTimeMillis();
if (sleepTime > 0) {
try {
Thread.sleep(sleepTime + EMPTY_LOG_EVENT_DELAY);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
fTimeBasedTriggeringPolicy.checkRollover(new EmptyLogEvent());
}
Run Code Online (Sandbox Code Playgroud)
此外,它不会滚动空文件,但好的一点是,如果在下一个滚动时间内至少有一个有效的日志条目,它就会滚动。
| 归档时间: |
|
| 查看次数: |
12240 次 |
| 最近记录: |