Estoy usando logback/slf4j para hacer mi registro. Quiero analizar mi archivo de registro para analizar algunos datos, así que en lugar de analizar un gran archivo grande (que consiste principalmente en declaraciones de depuración) quiero tener dos instancias de registrador que cada registro en un archivo separado; uno para análisis y uno para todos los fines de registro. ¿Alguien sabe si esto es posible con Logback, o cualquier otro registrador para ese asunto?Logback para registrar mensajes diferentes en dos archivos
108
A
Respuesta
223
Es muy posible hacer algo como esto en logback. Aquí está un ejemplo de configuración:
<?xml version="1.0"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logfile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<appender name="ANALYTICS-FILE" class="ch.qos.logback.core.FileAppender">
<file>analytics.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<!-- additivity=false ensures analytics data only goes to the analytics log -->
<logger name="analytics" level="DEBUG" additivity="false">
<appender-ref ref="ANALYTICS-FILE"/>
</logger>
<root>
<appender-ref ref="FILE"/>
</root>
</configuration>
Entonces será configurar dos registradores separados, uno para cada cosa y uno para registrar los datos de análisis de este modo:
Logger analytics = LoggerFactory.getLogger("analytics");
1
en mi caso quería dejar los nombres de clases como ingrese el nombre
private static final Logger log = LoggerFactory.getLogger(ScheduledPost.class);
y como tenía pocas de estas clases, por lo que mi logbook.xml
<!--additivity=false ensures this log data only goes to the this log, and no one more -->
<logger name="xxx.xxx.xxx.ScheduledPost" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
<logger name="xxx.xxx.xxx.GcmPost" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
<logger name="xxx.xxx.xxx.PushUtils" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
1
Puede tener tantos registradores como desee. Pero es mejor que tenga uno para cada paquete que necesita para registrarse de manera diferente. Entonces, todas las clases en ese paquete y sus subpaquetes obtendrán ese registrador específico. Todos pueden compartir el registrador de raíz y enviar sus datos de registro al apilador de registrador de raíz usando additivity = "true". He aquí un ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="pattern" value="%date{HH:mm:ss.SSS} %-5p %logger{36}
%X{akkaSource} [%file:%line] - %m%n" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} %-5p %logger{36} %X{akkaSource} [%file:%line] - %m%n</pattern>
</encoder>
</appender>
<appender name="abc" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/worker.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${catalina.base}/logs/worker-%d{yyyy-MM-dd_HH}.log</fileNamePattern>
<maxHistory>360</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<appender name="xyz" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/transformer.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${catalina.base}/logs/transformer-%d{yyyy-MM-dd_HH}.log</fileNamePattern>
<maxHistory>360</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<logger name="com.xxx.yyy.zzz" level="INFO" additivity="true">
<appender-ref ref="xyz"/>
</logger>
<logger name="com.aaa.bbb.ccc" level="INFO" additivity="true">
<appender-ref ref="abc"/>
</logger>
<root>
<level value="INFO" />
<appender-ref ref="STDOUT" />
</root>
Cuestiones relacionadas
- 1. Registrando en dos archivos con configuraciones diferentes
- 2. Cómo configurar log4j para registrar diferentes niveles de registro en diferentes archivos para el mismo registrador
- 3. Registrar mensajes SOAP
- 4. Cómo usar SLF4J para iniciar sesión en dos archivos diferentes según el tipo de mensaje ...?
- 5. Archivos Diff presentes en dos directorios diferentes
- 6. ¿Cómo registrar múltiples hilos en diferentes archivos de registro?
- 7. Cómo registrar texto de líneas múltiples en Logback/SLF4J?
- 8. Formateo de slf4j para registrar tipos de mensajes con colores
- 9. ¿Debo registrar mensajes en stderr o stdout?
- 10. Registrar mensajes en la consola JUnit
- 11. Usar Ant para unir dos archivos de propiedades diferentes
- 12. Shellscript acción si dos archivos son diferentes
- 13. ¿Cómo puedo configurar log4net para registrar mis archivos en diferentes carpetas cada día?
- 14. Cómo registrar mensajes de seguimiento con log4net?
- 15. Ir a svn: Agregar fecha de compromiso para registrar mensajes
- 16. Diferentes extensiones de archivos para diferentes versiones
- 17. Diferentes archivos security.yml para diferentes entornos
- 18. ¿Cómo usar diferentes archivos .settings para diferentes entornos en .NET?
- 19. Uso de rutas relativas para registrar archivos en Pylon's development.ini
- 20. Github: enrutamiento de mensajes diferentes proyectos a diferentes mensajes de correo electrónico en mi cuenta
- 21. Marcadores en Logback
- 22. Diferentes archivos Default.png para diferentes destinos en un proyecto
- 23. Cómo registrar errores, mensajes en una prueba de unidad NUnit?
- 24. eclipse, dos archivos diferentes con el mismo nombre en diferentes directorios
- 25. Fuerza slf4j para usar logback
- 26. estructura en diferentes archivos .cpp
- 27. ¿Puedes registrar errores php en varios archivos?
- 28. ¿Debo registrar los archivos * .mo?
- 29. Logback nativa VS Logback través SLF4J
- 30. set_intersection para dos tipos diferentes de conjuntos
tengo que hacer este tipo de cosas para que yo pueda tener un appender sin línea de alimentación y una appender regular para el mismo archivo. Gracias por esta información – djangofan
IMO additivity = false debe ser el valor predeterminado si se especifica diferente appender-ref. Con mucha frecuencia obtenemos aplicaciones en las que algunos módulos serán generadores de registros muy frecuentes debido a algunos eventos del temporizador, y nos gustaría separar esos registros en diferentes archivos. Iniciar sesión en el mismo registro en 10 archivos diferentes realmente no tiene sentido. Por lo tanto, debe ser una característica de aceptación no predeterminada. Como el logback fue una reescritura, el mismo error debería haber sido corregido por el mismo autor. –
Quiero registrar errores, depurar, mensajes de información en diferentes archivos, respectivamente. ¿Es posible con logback.xml – Qasim