如何手动旋转log4j日志

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)

rgo*_*ers 5

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)