我想为特定方法调用MyMethod()创建和启用appender,其日志输出应该转到"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");
}
Run Code Online (Sandbox Code Playgroud)
我用以下方式调用上面的方法:
private static FileAppender fileAppender = null;
private static void myMethod(String logFilePath) {
try {
fileAppender = createNewAppender();
someOperation();
}
finally {
removeAppender();
fileAppender=null;
}
}
Run Code Online (Sandbox Code Playgroud)
很容易创建一个方法并添加它
String targetLog="where ever you want your log"
FileAppender apndr = new FileAppender(new PatternLayout("%d %-5p [%c{1}] %m%n"),targetLog,true);
logger.addAppender(apndr);
logger.setLevel((Level) Level.ALL);
Run Code Online (Sandbox Code Playgroud)
然后在你需要记录的任何方法中执行此操作:logger.error("你的错误在这里");