es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excepción de clase no encontrada en logger.error en log4j2.

He migrado mi código jar de log4j 1.2.8 a 2.17.0. En un punto, mi código entra en una excepción en el bloque catch que se ve como el siguiente código:

catch(Exception e){
     logger.error("Error al cargar xyz" + e, e);
}

He agregado el siguiente código al inicio de mi clase:

private static final Logger logger = LogManager.getLogger(abcdef.class);

El error que obtengo es el siguiente:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger

Este error desaparece cuando agrego log4j 1.2.8. Pero quiero usar solo log4j 2.17.0.

A continuación se muestra el contenido de mi archivo log4j2.properties:

status = error

name = PropertiesConfig

property.basepath= target/logs/test

appender.rolling.type = RollingFile
appender.rolling.name = filelogger
appender.rolling.fileName = ${basepath}/application.log
appender.rolling.filePattern = ${basepath}/application.log-%d{MM-dd-yy-HH-mm-ss}-%i.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%l] - %msg%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5

appender.console.type = Console
appender.console.name = LogToConsole
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d [%t] %-5p %c - %m%n


rootLogger.level = debug
rootLogger.appenderRefs= stdout
rootLogger.appenderRef.rolling.ref= fileLogger
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “java.lang.NoClassDefFoundError: org/apache/log4j/Logger” sugiere que el programa está intentando utilizar log4j 1.x en lugar de log4j 2.x.

    Para resolver este problema, asegúrate de que todas las dependencias en tu proyecto estén actualizadas para usar la versión log4j 2.x, y elimina cualquier referencia a log4j 1.x del proyecto. También puedes verificar tu classpath y asegurarte de que no haya conflictos entre las librerías log4j 1.x y log4j 2.x.

    Mencionaste que has migrado de log4j 1.2.8 a 2.17.0, por lo que es posible que aún haya algunas dependencias en tu proyecto que estén haciendo referencia a log4j 1.2.8. Verifica todas las dependencias y asegúrate de que estén actualizadas para usar log4j 2.x.

    Además, asegúrate de que el archivo log4j2.properties esté ubicado en la ubicación correcta y esté siendo leído por la aplicación. La propiedad “name” debería coincidir con el nombre del registrador en tu código. En este caso, debería ser “abcdef”.

    Por último, verifica que el nombre del registrador en tu bloque catch coincida con el nombre del registrador en tu archivo de propiedades. Si no son iguales, es posible que tus registros no se estén enviando al correcto “appender”.

    Si aún tienes problemas, intenta habilitar el modo de depuración en log4j2.properties cambiando “status = error” a “status = debug”, y revisa los registros en busca de cualquier información adicional o mensajes de error.

Comments are closed.