Pregunta
¿Es posible hacer que Log4J muestre la ruta completa del archivo que utilizó para la configuración?
Antecedentes
Tengo una relación de amor y odio con log4j. En los buenos tiempos, es genial, pero cuando no funciona, puede ser una de las cosas más difíciles de depurar. Administro todo el registro en nuestra aplicación. Como tal, estoy muy familiarizado con el registro y el procedimiento de inicialización predeterminado definido en el manual. Aún así, parece que, cada pocas semanas, se interrumpe el registro y dedico mucho tiempo a resolver el problema.
Esta vez, está muy roto. Cada declaración de registro en todas partes se descarga en la consola y no puedo entender por qué. La misma base de código exacta que usó mis archivos log4j.xml la semana pasada, de repente está usando alguna otra configuración. Nada obvio ha cambiado. Mi única suposición es que algunas dependencias han cambiado y sospecho que Maven ha descargado un JAR malvado que lo está rompiendo todo.
Si pudiera averiguar qué archivo de configuración Log4J decidió usar al inicio , podría abordar este y la mayoría de los otros problemas fácilmente.
Resumen
¿Hay alguna forma de decirle a Log4J que imprima qué archivo usó para la configuración? Alternativamente, ¿hay alguna manera de romper una aplicación en ejecución y usar el depurador para responder esta pregunta (tal vez con una expresión o inspeccionando variables)?
Respuestas:
Sí, simplemente agregue
log4j.debug
a las variables del sistema JVM. Por ejemplo:Log4j luego generará algo como lo siguiente:
Para referencia, consulte el manual y las preguntas frecuentes .
fuente
Estoy usando Log4J2 y si desea obtener el archivo desde dentro de su programa Java, esto funcionó para mí:
LoggerContext lContect = LogManager.getContext(); Field f = lContect.getClass().getDeclaredField("configuration"); f.setAccessible(true); XmlConfiguration iWantThis = (XmlConfiguration) f.get(lContect); System.out.println("Config File: " + iWantThis.getName());
fuente
El equivalente de log4j 2 para esto se establece
<Configuration status="trace">
en el archivo de configuración. Esto mostrará la ubicación desde donde se carga el archivo de configuración log4j2, así como otros detalles internos del proceso de configuración log4j2. De forma predeterminada, el nivel del registrador de estado es WARN, por lo que solo verá notificaciones cuando haya un problema.Si el archivo de configuración no se encuentra correctamente, aún puede habilitar el registro de estado interno de log4j2 estableciendo la propiedad del sistema
org.apache.logging.log4j.simplelog.StatusLogger.level
enTRACE
.fuente