[英]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.