Usando un archivo XML (log4j2.xml) para configurar Log4j 2

Quiero usar el nuevo Log4J 2 – Java Logging Framework. Todo funciona bien, pero durante una hora intenté cargar un archivo de configuración personalizado para configurar el registro (como el nivel de registro).

Este es mi log4j2.xml:

             

Intenté lo siguiente, pero nada funciona:

  • Mueva el archivo log4j2.xml para que se encuentre en el paquete predeterminado.
  • Mueva el archivo log4j2.xml a cualquier lugar del proyecto
  • Nombre el archivo log4j2.xml como “log4j.xml”
  • Cree una carpeta en su proyecto, coloque su archivo log4j2.xml allí y agregue esa carpeta a su classpath de tiempo de ejecución

Dado que el sitio web oficial no puede ayudarme, espero que pueda ayudarme a que Log4j 2 funcione con mi archivo de configuración.

Importante: asegúrese de que el nombre del archivo de configuración sea log4j2.xml (tenga en cuenta el 2 antes del período) en lugar de log4j.xml

Mi conjetura es que no pasa nada porque no se registra nada utilizando el nivel de error. Puede intentar agregar otro registrador así:

    

Parece que la sección Configuración podría ser un buen recurso.

Para más detalles, está especificando un registrador con el nivel establecido en “error”:

    

Esto significa que solo los mensajes registrados con Level.ERROR aparecerán en el registro. Agregar un registrador con un nivel menos restrictivo permitirá que aparezcan más mensajes en el registro. Recomiendo echar un vistazo a la sección de Arquitectura del manual (si se desplaza hacia abajo en la página, verá la tabla que explica los niveles de registro). Alternativamente, puede cambiar el nivel del registrador raíz para rastrear (en lugar de agregar un nuevo registrador)

Dada la configuración que especificó, la ejecución del siguiente código produce algo así como 13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR level

 package com.example; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Log4j2Tester { private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class); public static void main(String[] args) { LOG.error("testing ERROR level"); //if you change the level of root logger to 'trace' //then you'll also see something like // 13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application LOG.trace("exiting application"); } } 

CONSEJO: Para usar archivos log4j personalizados. (En lugar de la cosa predeterminada “log4j2.xml”). Puede ser útil tener varias configuraciones en algunos casos.

En caso de que alguien utilice maven y desee configurar log4j2, esto es lo que necesita en su pom.xml:

    /log4j.configuration .../../Foo-log4j.xml   

De forma predeterminada, “log4j2.xml” es el nombre de archivo esperado. Pero, sin embargo, podemos anular eso estableciendo la propiedad del sistema log4j.configuration. En el ejemplo anterior, he usado el archivo de configuración personalizado como “Foo-log4j.xml”.

Puedes hacer lo mismo a través de CLI:

 -Dlog4j.configuration="Foo-log4j.xml" 

Mis 2 centavos:

Sistema de software: log4j 2, NetBeans y TestNG.

Tuve el mismo problema, pero con el entorno de prueba.

De forma predeterminada, (es decir, en el archivo log4j2.xml ubicado en src /), el nivel de registro se establece en error. Pero al ejecutar las pruebas, quiero que el registro sea un seguimiento. Y, por supuesto, registrado en algún archivo más o menos hardcoded.

Es decir, originalmente hice algo como:

 public class someTestClass { static final Logger log=LogManager.getLogger("test.someTestClass"); ...... @Test public void SomeMethod(){ System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml"); log.trace("This will not show because the default logging level is ERROR and the resources/log4j2_conf.xml is not loaded"); } 

El problema es que, en el momento en que se ejecute la instrucción System.setProperty, ya se habrá configurado log4j (es decir, el logger logístico final estático primero se ejecutará).

Lo que hice, es usar el @BeforeClass de esta manera:

  public class someTestClass { Logger log; @BeforeClass public void setLogger(){ SetEnv.SetEnvironment(); log = LogManager.getLogger("TestRealClientRealServer"); } ...... @Test public void SomeMethod(){ log.trace("This will show, because in log4j2_conf.xml the root level is set to TRACE"); } } 

Por cierto, los recursos / se pueden colocar en paquetes de prueba para que no envíe la configuración log4j de “prueba”.

Espero eso ayude

Además de usar el archivo de configuración predeterminado, log4j2.xml (o log4j2-test.xml) en la carpeta raíz de la ruta de clase, puede usar esta propiedad del sistema para especificar la ruta del archivo de configuración (use -D en la línea de comandos de java)

 log4j.configurationFile='xxxx/xxx/xxx' 

Un consejo para los usuarios de eclipse:

Haga clic derecho en el proyecto y haga clic en “actualizar”. Asegúrate de poder ver el archivo log4j2.xml en eclipse.

Respuesta completa aquí: log4j 2 – problema de configuración

Coloque el LOG4J2.XML en la carpeta raíz del proyecto src / main .