tutorial ruta relativa mvc mediante libro framework español desarrollo book aplicaciones java logging output slf4j bin

java - ruta - spring mvc 4 tutorial español



¿Dónde se guarda el archivo de registro slf4j? (4)

Tengo las siguientes importaciones:

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

y la siguiente instanciación:

private static Logger logger = LoggerFactory.getLogger(Test.class);

y lo siguiente en mi método principal:

logger.info("SOME MESSAGE: ");

Sin embargo, no puedo encontrar la salida en ningún lado. Todo lo que veo es que en mi consola hay:

21:21:24.235 [main] INFO some_folder.Test - SOME MESSAGE:

¿Cómo localizo el archivo de registro?

Tenga en cuenta que los siguientes están en mi ruta de compilación:

slf4j-api-1.7.5.jar

slf4j-log4j12-1.6.4.jar

Leí la respuesta a preguntas similares, pero nadie dice cómo solucionar el problema.


Como ya se mencionó, es solo una fachada y ayuda a cambiar fácilmente entre diferentes implementaciones de registradores. Por ejemplo, si desea usar la implementación de log4j.

Un código de muestra se verá a continuación.

Si usa maven obtenga las dependencias

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency>

Tenga lo siguiente en log4j.properties en la ubicación src / main / resources / log4j.properties

log4j.rootLogger=DEBUG, STDOUT, file log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=mylogs.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n

Hola, el código mundial siguiente se imprime en la consola y en un archivo de registro según la configuración anterior.

import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }


El archivo de registro no está visible porque la ubicación del archivo de configuración slf4j debe pasarse al comando de ejecución java usando los siguientes argumentos. (Ej.)

-Dlogging.config = {ubicación_de_archivo} / log4j2.xml

-Dlog4j.configurationFile = {ubicación_archivo} / log4j2.xml


No escribe en un archivo por defecto. RollingFileAppender configurar algo como RollingFileAppender y hacer que el registrador de raíz escriba en él (posiblemente además del ConsoleAppender predeterminado).


slf4j es solo una API. Debería tener una implementación concreta (por ejemplo, log4j). Esta implementación concreta tiene un archivo de configuración que le dice dónde almacenar los registros.

Cuando slf4j capta un mensaje de registro con un registrador, se lo da a un appender que decide qué hacer con el mensaje. De forma predeterminada, ConsoleAppender muestra el mensaje en la consola.

El archivo de configuración predeterminado es:

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

Si pone un archivo de configuración disponible en el classpath, entonces su implementación concreta (en su caso, log4j) lo encontrará y lo usará. Ver la documentación de Log4J.

Ejemplo de archivo appender:

<Appenders> <File name="File" fileName="${filename}"> <PatternLayout> <pattern>%d %p %C{1.} [%t] %m%n</pattern> </PatternLayout> </File> ... </Appenders>

Ejemplo completo con un apéndice de archivo:

<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <File name="File" fileName="${filename}"> <PatternLayout> <pattern>%d %p %C{1.} [%t] %m%n</pattern> </PatternLayout> </File> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="File"/> </Root> </Loggers> </Configuration>