【发布时间】:2012-05-28 18:52:14
【问题描述】:
我想为调用 MyMethod() 的特定方法创建和启用附加程序,其日志输出应该转到“logFilePath”处的文件。
我不想在 xml 配置文件中包含这个 appender,所以我想在运行时创建它。
首先,我尝试在运行时修改记录器属性,然后调用activateOptions,例如。之前将 level 设置为 DEBUG 并在 finally 块中将其设置为 Off ,以便仅在使用该方法时记录输出。那没用。
我的问题是 appender 每次都重新创建一个文件,而不是附加到同一个文件。尽管 setAppend 为真。
我对 log4j 不是很熟悉,所以请随时提出替代方法。 以下是解释我正在尝试的示例代码。
private static FileAppender createNewAppender(String logFilePath) {
FileAppender appender = new FileAppender();
appender.setName("MyFileAppender");
appender.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
appender.setFile(logFilePath);
appender.setAppend(true);
appender.setThreshold(Level.INFO);
appender.activateOptions();
Logger.getRootLogger().addAppender(appender);
return appender;
}
private static void removeAppender() {
Logger.getRootLogger().removeAppender(fileAppender) ; // ("MyFileAppender");
}
我通过以下方式调用上述方法:
private static FileAppender fileAppender = null;
private static void myMethod(String logFilePath) {
try {
fileAppender = createNewAppender();
someOperation();
}
finally {
removeAppender();
fileAppender=null;
}
}
【问题讨论】:
-
那是 slf4j - 不是 log4j。在此处查找 log4j:stackoverflow.com/questions/15441477/…