繁体   English   中英

在向同一文件创建两个追加程序时,Log4J RollingFileAppender不会滚动文件

[英]Log4J RollingFileAppender doesn't roll files when creating two appenders to the same file

尽管我已经阅读了有关此问题的其他多个问题和解答,但我没有找到答案,希望能对您有所帮助。

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 ,它们写入同一文件。

因此,即使一个RollingFileAppender尝试将其移到新文件上也不能这样做,因为该文件已被另一个RollingFileAppender锁定。

您可以做的只是创建一个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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM