log4java example ejemplo configurar java logging log4j2

java - ejemplo - log4j2 properties example



Configuración de Log4j2: no se encontró ningún archivo de configuración de log4j2 (6)

Últimamente decidí aprender a usar logger log4j2. Descargué los archivos jar requeridos, la biblioteca creada, el archivo de configuración xml y traté de usarlo. Desafortunadamente recibo esta declaración en la consola (Eclipse):

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

Este es mi código de clase de prueba:

package log4j.test; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Log4jTest { static final Logger logger = LogManager.getLogger(Logger.class.getName()); public static void main(String[] args) { logger.trace("trace"); logger.debug("debug"); logger.info("info"); logger.warn("warn"); logger.error("error"); logger.fatal("fatal"); } }

Y mi archivo de configuración xml:

<?xml version="1.0" encoding="UTF-8"?> <Configuration package="log4j.test" status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="log4j.test.Log4jTest" level="trace"> <AppenderRef ref="Console"/> </Logger> <Root level="trace"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>

Intenté también con xml sin las etiquetas <Logger> y la especificación del paquete y en varios directorios de carpetas / paquetes, pero no sirvió de nada. Ahora mi archivo log4j2.xml se encuentra directamente en la carpeta del proyecto en eclipse.


¿Es este un simple proyecto de eclipse java sin maven etc.? En ese caso, deberá colocar el archivo log4j2.xml en la carpeta src para poder encontrarlo en classpath. Si usa maven, póngalo bajo src/main/resources o src/test/resources


Además de lo que escribió Tomasz W, al iniciar su aplicación puede usar la configuración:

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE

para obtener la mayoría de los problemas de configuración.

Para más detalles, consulte las preguntas más frecuentes de Log4j2: ¿Cómo depuro mi configuración?


Debe elegir una de las siguientes soluciones:

  1. Coloque el archivo log4j2.xml en el directorio de recursos de su proyecto para que log4j ubique los archivos en la ruta de la clase.
  2. Usar la propiedad del sistema -Dlog4j.configurationFile = file: /path/to/file/log4j2.xml

Eclipse nunca verá un archivo hasta que fuerce una actualización del IDE. Es una característica! Así que puedes poner el archivo en todo el proyecto y Eclipse lo ignorará por completo y lanzará estos errores. Pulse actualizar en la vista del proyecto Eclipse y luego funciona.


En mi caso, tuve que ponerlo en la carpeta bin de mi proyecto, incluso el hecho de que mi classpath está configurado en la carpeta src. No tengo idea de por qué, pero vale la pena intentarlo.


Estaba siguiendo las documentaciones: Apache Log4j2 Configuratoin y Apache Log4j2 Maven en la configuración de log4j2 con yaml. Según la documentación, se requieren las siguientes dependencias maven:

<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.1</version> </dependency>

y

<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.8.6</version> </dependency>

Simplemente agregando estos no eligió la configuración y siempre dio error. La forma de depurar la configuración agregando -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE ayudó a ver los registros. Luego tuvo que descargar la fuente usando Maven y la depuración ayudó a entender las clases dependientes de log4j2. Se enumeran en org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory :

com.fasterxml.jackson.databind.ObjectMapper com.fasterxml.jackson.databind.JsonNode com.fasterxml.jackson.core.JsonParser com.fasterxml.jackson.dataformat.yaml.YAMLFactory

Agregar una asignación de dependencia para jackson-dataformat-yaml no tendrá las dos primeras clases. Por lo tanto, agregue la dependencia jackson-databind para que funcione la configuración yaml:

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency>

Puede agregar la versión consultando la sección Test Dependencies del elemento de la versión log4j-api del Repositorio MVN . Por ejemplo, para la versión 2.8.1 de log4j-api, consulte este link y busque la versión de jackson-databind .

Además, puede usar el siguiente código Java para verificar si las clases están disponibles en el classpath:

System.out.println(ClassLoader.getSystemResource("log4j2.yml")); //Check if file is available in CP ClassLoader cl = Thread.currentThread().getContextClassLoader(); //Code as in log4j2 API. Version: 2.8.1 String [] classes = {"com.fasterxml.jackson.databind.ObjectMapper", "com.fasterxml.jackson.databind.JsonNode", "com.fasterxml.jackson.core.JsonParser", "com.fasterxml.jackson.dataformat.yaml.YAMLFactory"}; for(String className : classes) { cl.loadClass(className); }