Log4J 滚动文件追加器在为同一文件创建两个追加器时不会滚动文件



尽管我已经阅读了有关此问题的其他多个问题和答案,但我没有找到答案,并且希望有任何帮助。

public static void rerouteAppenderToFile(File file, Logger... log) {
    for (Logger logger : log) {
        rerouteAppenderToFile(file, logger);
    }
}
public static void rerouteAppenderToFile(File file, Logger log) {
    log.setAdditivity(false);
    log.setLevel(Level.DEBUG);
    RollingFileAppender fa = new RollingFileAppender();
    fa.setName("RollingFileAppender_" + log.getName());
    fa.setMaxBackupIndex(3);
    fa.setMaxFileSize("20MB");
    File folder = file.getParentFile();
    folder.mkdirs();
    if (folder.exists() && folder.isDirectory()) {
        fa.setFile(file.getAbsolutePath());
        fa.setLayout(new PatternLayout(LOGGER_PATTERN));
        fa.setThreshold(Level.DEBUG);
        fa.setAppend(true);
        fa.activateOptions();
        log.addAppender(fa);
    }
}

我在这里要实现的目标是能够使用RollingFileAppender将多个记录仪(2或更多)附加到同一文件。由于某些原因,文件未滚动,日志不断越来越大

问题是您创建了写入同一文件的多个 RollingFileAppender s。

因此,即使一个 RollingFileAppender试图将其滚动到新文件,也不能这样做,因为该文件已由另一个RollingFileAppenders。

锁定

您可以做的就是仅创建一个RollingFileAppender实例,然后将记录器重新布线重新布线为此实例。

以下代码给出了这个想法,但是如果您几次致电rerouteAppenderToFile()以进行单个文件。

public static void rerouteAppenderToFile(File file, Logger... log) {
    RollingFileAppender fa = createAppender(file);
    for (Logger logger : log) {
        rerouteAppenderToFile(f, logger);
    }
}
public static Appender createAppender(File file) {
    RollingFileAppender fa = new RollingFileAppender();
    fa.setName("RollingFileAppender_" + log.getName());
    fa.setMaxBackupIndex(3);
    fa.setMaxFileSize("20MB");
    File folder = file.getParentFile();
    folder.mkdirs();
    fa.setFile(file.getAbsolutePath());
    fa.setLayout(new PatternLayout(LOGGER_PATTERN));
    fa.setThreshold(Level.DEBUG);
    fa.setAppend(true);
    fa.activateOptions();
    return fa;
}
public static void rerouteAppenderToFile(Appender fa, Logger log) {
    log.setAdditivity(false);
    log.setLevel(Level.DEBUG);
    log.addAppender(fa);
}

最新更新