eve*_*zon 3 java log4j rotation
我已将log4j配置为每天轮换日志。
在特殊情况下,我想手动触发其他日志轮换。
这可能吗?如果可以,怎么办?
像这样解决:
void rolloverLogs() {
for(final Enumeration<?> loggers = LogManager.getCurrentLoggers(); loggers.hasMoreElements(); ) {
final Logger logger = (Logger) loggers.nextElement();
for (final Enumeration<?> appenders = logger.getAllAppenders(); appenders.hasMoreElements(); ) {
final Appender a = (Appender) appenders.nextElement();
if(!RollingFileAppender.class.isInstance(a))
continue;
((RollingFileAppender)a).rollOver();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Lahiru显示的技术将仅根据代码所在的类来定位为特定Logger配置的Appender。如果配置发生更改,则所定位的确切Appender可能会有所不同。
如果您知道Appender名称,最好的方法是:
org.apache.logging.log4j.core.LoggerContext context = LogManager.getContext(false);
Appender appender = context.getConfiguration().getAppender(appenderName);
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().rollover();
}
Run Code Online (Sandbox Code Playgroud)
如果要滚动所有RollingFileAppenders,可以执行以下操作:
org.apache.logging.log4j.core.LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
for (Appender appender : context.getConfiguration().getAppenders().values()) {
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().rollover();
}
}
Run Code Online (Sandbox Code Playgroud)