Desidero creare e abilitare un appender per un metodo particolare chiamata MyMethod(), il cui output di registro deve passare a un file presente in "logFilePath" .Log4j: creazione/modifica di appendici in fase di runtime, file di registro ricreato e non aggiunto
Non voglio includere questo appender nel file di configurazione xml, quindi ho pensato di crearlo in fase di esecuzione.
In primo luogo, ho provato a modificare le proprietà del logger in fase di esecuzione e quindi chiamare activateOptions, ad es. impostando il livello su DEBUG prima e impostandolo su Off nel blocco finally, in modo che l'output venga registrato solo mentre il metodo è in uso. Non ha funzionato.
Il mio problema qui è che l'appender ricrea un file ogni volta e non aggiunge lo stesso file. Questo è a dispetto di setAppend essere vero.
Non ho molta familiarità con log4j, quindi non esitate a suggerire un approccio alternativo. Quanto segue è un codice di esempio per spiegare cosa sto provando.
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");
}
io chiamo i metodi di cui sopra nel seguente modo:
private static FileAppender fileAppender = null;
private static void myMethod(String logFilePath) {
try {
fileAppender = createNewAppender();
someOperation();
}
finally {
removeAppender();
fileAppender=null;
}
}