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:
- 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.
- 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);
}