inicio de sesión repetido en log4j en java
Pregunta
Utilicé log4j en un programa java. Lo inicialicé con:
BasicConfigurator.configure(); // logger configuration
try {
logger.setLevel(Level.DEBUG);
} catch (Exception e) {
System.out.println("Logfile not found");
}
Pero, durante la ejecución del programa, obtengo 3 instrucciones de registro en lugar de una. Por ejemplo,
3 lines
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
en lugar de una línea
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
¿Se deben realizar configuraciones adicionales para log4j para evitar esto?
Solución
He experimentado un comportamiento similar, y resultó que Log4J se configuró más de una vez; utilizando el BasicConfigurator, pero también con un archivo log4j.xml que había olvidado. ¿Podría ser que haya una configuración adicional de Log4J en algún lugar de la ruta de clase?
Otros consejos
Lo más probable es que tengas más de un Anexos. Consulte el log4j manual (Sección: Anexos y diseños):
Cada solicitud de registro habilitada para un registrador dado se reenviará a todos los agregadores en ese registrador, así como a los agregadores más altos en la jerarquía.
Puedes intentar configurar el indicador de aditividad en falso.
Bueno, no has mostrado cómo se está ejecutando tu programa. Aquí hay un programa completo que solo muestra una sola línea:
import org.apache.log4j.*;
public class Test
{
public static void main(String[] args)
{
BasicConfigurator.configure(); // logger configuration
Logger logger = Logger.getLogger(Test.class);
logger.setLevel(Level.DEBUG);
logger.info("Hello");
}
}
¿Es posible que tu código realmente se esté ejecutando tres veces?
En mi caso, estaba agregando un nuevo appender cada vez que llamé al BasicConfigurator.configure ().
Lo resolví restableciendo la configuración:
BasicConfigurator.resetConfiguration() //reset first
BasicConfigurator.configure() // then configure
Debo confesar que no entiendo claramente lo que está pasando, pero seguramente resolvió mi problema.