Quiero crear y habilitar un appender para un método en particular llamado MyMethod(), cuyo resultado de registro se supone que debe ir a un archivo presente en "logFilePath" .Log4j: Crear/modificar appenders en tiempo de ejecución, archivo de registro reconstruido y no anexado
No quiero incluir este appender en el archivo de configuración xml, así que pensé en crearlo en tiempo de ejecución.
Primero, traté de modificar las propiedades del registrador en el tiempo de ejecución y luego llamar a activateOptions, por ej. ajustando el nivel a DEPURAR antes y configurándolo en Desactivado en el bloque finalmente, de modo que la salida se registra solo mientras el método está en uso. Eso no funcionó.
Mi problema aquí es que appender recrea un archivo cada vez y no se agrega al mismo archivo. Esto es a pesar de que setAppend sea cierto.
No estoy muy familiarizado con log4j, así que no dude en sugerir un enfoque alternativo. El siguiente es un código de muestra para explicar lo que estoy intentando.
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");
}
me llaman los métodos anteriores de la siguiente manera:
private static FileAppender fileAppender = null;
private static void myMethod(String logFilePath) {
try {
fileAppender = createNewAppender();
someOperation();
}
finally {
removeAppender();
fileAppender=null;
}
}