Estoy interesado en cambiar programáticamente el nivel de registro en Log4j2. Intenté mirar su documentación de configuración pero no parecía tener nada. También intenté buscar en el paquete:, org.apache.logging.log4j.core.config
pero tampoco nada me pareció útil.
109
Respuestas:
EDITADO según log4j2 versión 2.4 FAQ
Puede establecer el nivel de un registrador con la clase Configurador de Log4j Core. PERO tenga en cuenta que la clase Configurator no es parte de la API pública.
Fuente
EDITADO para reflejar los cambios en la API introducidos en Log4j2 versión 2.0.2
Si desea cambiar el nivel del registrador raíz, haga algo como esto:
Aquí está el javadoc para LoggerConfig.
fuente
La respuesta aceptada por @slaadvak no me funcionó para Log4j2 2.8.2 . Lo siguiente hizo.
Para cambiar el registro
Level
universalmente use:Para cambiar el registro
Level
solo para la clase actual, use:fuente
Si desea cambiar un único nivel de registrador específico (no el registrador raíz o los registradores configurados en el archivo de configuración) puede hacer esto:
fuente
setLevel(logger, Level.ERROR);
y declaraciones logger.debug siendo impresa. Mi archivo log4j2.xml está en pastebin.com/fcbV2mTWEncontré una buena respuesta aquí: https://garygregory.wordpress.com/2016/01/11/changing-log-levels-in-log4j2/
Puede usar org.apache.logging.log4j.core.config.Configurator para establecer el nivel de un registrador específico.
fuente
El enfoque programático es bastante intrusivo. Quizás debería verificar el soporte JMX brindado por Log4J2:
Habilite el puerto JMX en el inicio de su aplicación:
-Dcom.sun.management.jmxremote.port = [port_num]
Utilice cualquiera de los clientes JMX disponibles (la JVM proporciona uno en JAVA_HOME / bin / jconsole.exe) mientras ejecuta su aplicación.
En JConsole, busque el bean "org.apache.logging.log4j2.Loggers"
Finalmente cambie el nivel de su registrador
Lo que más me gusta de esto es que no tienes que modificar tu código o configuración para administrarlo. Todo es externo y transparente.
Más información: http://logging.apache.org/log4j/2.x/manual/jmx.html
fuente
La mayoría de las respuestas asumen por defecto que el registro tiene que ser aditivo. Pero digamos que algún paquete está generando muchos registros y desea desactivar el registro solo para ese registrador en particular. Aquí está el código que usé para que funcione
Un caso de prueba para lo mismo
Suponiendo que el siguiente log4j2.xml está en classpath
fuente
Una forma poco habitual que encontré para hacerlo es crear dos archivos separados con diferentes niveles de registro.
Por ejemplo. log4j2.xml y log4j-debug.xml Ahora cambie la configuración de estos archivos.
Código de muestra:
fuente