gpt4 book ai didi

java - Log4J RollingFileAppender 在为同一文件创建两个附加程序时不会滚动文件

转载 作者:行者123 更新时间:2023-12-01 09:46:48 26 4
gpt4 key购买 nike

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

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);
}

关于java - Log4J RollingFileAppender 在为同一文件创建两个附加程序时不会滚动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37937293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com