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.

Bug de log4j cuando registra un Map vacío.

<dependency>
    <groupid>org.apache.logging.log4j</groupid>
    <artifactid>log4j-api</artifactid>
    <version>2.14.1</version>
</dependency>

Códigos Java:

Logger logger = LogManager.getLogger();
Map<string, string=""> map = new HashMap<>();
System.out.println(logger);
logger.info("{}-{}", System.currentTimeMillis(), map);

Salida:

org.apache.logging.slf4j.SLF4JLogger@1c2c22f3
20:12:56.257 [main] INFO com.xxx - 1639051976254-1639051976254

Obviamente, la salida correcta debería ser 1639051976254-{}
¿Alguien tiene el mismo problema?</string,>

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en log4j2, puedo ver que el problema con la salida se debe a una configuración incorrecta del registrador.

    Según el código proporcionado, parece que se está utilizando el registrador predeterminado LogManager.getLogger(), lo cual está causando que la salida sea incorrecta. Para solucionar este problema, es necesario agregar una configuración adecuada del registrador al proyecto.

    Una forma de hacer esto es creando un archivo log4j2.xml en la carpeta de recursos y proporcionando la configuración necesaria para el registrador.

    Por ejemplo, se puede utilizar la siguiente configuración log4j2.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="WARN">
        <appenders>
            <console name="Console" target="SYSTEM_OUT">
                <patternlayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"></patternlayout>
            </console>
        </appenders>
        <loggers>
            <root level="info">
                <appenderref ref="Console"></appenderref>
            </root>
        </loggers>
    </configuration>
    

    Una vez que se haya agregado esta configuración, el registrador debería ser obtenido con el nombre ‘com.xxx’ (donde ‘xxx’ es el nombre del paquete/clase que se está registrando) de la siguiente manera:

    LoggerContext context = (LoggerContext) LogManager.getContext(false);
    context.setConfigLocation(Resources.getResource("log4j2.xml").toURI());
    
    Logger logger = LogManager.getLogger("com.xxx");
    Map<string, string=""> map = new HashMap<>();
    logger.info("{}-{}", System.currentTimeMillis(), map);
    

    Esto debería solucionar el problema con la salida y proporcionar el resultado correcto.</string,>

Comments are closed.