Log4j:在运行时创建/修改appender,重新创建日志文件而不附加

Abh*_*nia 9 java log4j

我想为特定方法调用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)

gre*_*pit 7

很容易创建一个方法并添加它

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("你的错误在这里");