Problemas con el sl4j

Kaledros

No entiendo nada.

Para mi app estoy usando sl4j, una facade para logger de Java. No la he usado nunca, así que voy un poco dando palos de ciego. El caso es que mi log4j.xml es este:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug" additivity="false">
            <AppenderRef ref="console" />
        </Root>
    </Loggers>
</Configuration>

Como veis, el root level es "debug". El problema es que no me aparecen ni los log.info ni los log.debug ni tampoco los log.error. Y le ponga lo que le ponga como root level sigue sin aparecer ningún log salvo los del tomcat cuando arranca.

¿Puede ser que se esté sobreescribiendo esa configuración en algún sitio? No tengo nada más en el proyecto, no sé qué puede estar pasando.

JuAn4k4

¿Que dependencias has metido? Necesitas añadir log4j si es la que vas a usar. slf4j es una capa de abstracción entre lo que usas (slf4j) y la implementación (log4j).
Mira tus logs arriba del todo y veras alguno de slf4j quejandose de algo seguramente, imagino que warning.

1 respuesta
Kaledros

#2 Sí, tengo los dos, el log4j y el sl4j. Mi pom está así:

<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-api</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.13.0</version>
</dependency>

En el log de arranque no veo nada raro. Es este: https://pastebin.com/BFKTJVug

1 respuesta
JuAn4k4

#3 No recuerdo bien el tema, pero tienes solo console logger, y desplegando como war, ese log es el de la consola o es el del tomcat (fichero) al cual el IDE le hace una especie de tail?

Abre el war y mira en webinf si están tus dependencias. Haz un system.out.println de prueba para ver si estas leyendo la consola o no.
Añade al config un FilrAppender con una ruta fija a ver si el problema es otro.

1 respuesta
Kaledros

#4 Es el de la consola, el del tomcat va por otra pestaña del IDE. Y el system out sí que se ve en la consola. He mirado el webinf y todo correcto, están todos los jars que deben estar.

Kaledros

Arreglado. Era una estupidez como una casa pero me ha tenido toda la tarde. Por si a alguien le pasara en el futuro, el problema me lo ha enseñado el log al arrancar con "-Dlog4j.debug" en los argumentos de la VM. En el log he visto esto:

TRACE StatusLogger Trying to find [log4j2.xml] using context class loader ParallelWebappClassLoade

Y me he dado cuenta de que mi fichero se llama log4j.xml, no log4j2.xml. Cambiando el nombre ha ido a la primera.

JuAn4k4

Creo que tienes mal las deps, necesitas slf4j-api y no log4j-api, y usar slf4j en el import. Iguak estas usando log4j directamente y por eso no ves nada de slf4j

1 respuesta
Kaledros

#7 Los imports los tengo apuntando a slf4j:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

De hecho he probado a cambiar el import de log4j-api a slf4j-api y no ha cambiado nada, así que creo que sí estoy usando slf4j.

1 1 respuesta
JuAn4k4

#8 Puede ser que la tengas al ser una del de log4j-slf4j. Bueno me alegro que lo hayas solucionado

1

Usuarios habituales

  • JuAn4k4
  • Kaledros