Ich verwende logback/slf4j anmelden meine Protokollierung zu tun. Ich möchte, dass meine Log-Datei analysieren, einige Daten zu analysieren, so stattdessen eine große große Datei zu parsen (meist bestehend aus Debug-Anweisungen) I zwei Logger Instanzen haben wollen, die jeweils in einer separaten Datei protokolliert werden; eine für Analysen und eine für alle Zwecke. Weiß jemand, ob dies mit Logback oder einem anderen Logger möglich ist?Logback verschiedene Meldungen in zwei Dateien
108
A
Antwort
223
Es ist sehr gut möglich, so etwas wie dies in logback zu tun. Hier ist ein Beispiel-Konfiguration:
<?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>
Dann würden Sie Setup zwei separate Loggern, eine für alles und ein einzuloggen Analysedaten wie folgt:
Logger analytics = LoggerFactory.getLogger("analytics");
1
in meinem Fall habe ich Klassennamen verlassen wollte als Protokollname
private static final Logger log = LoggerFactory.getLogger(ScheduledPost.class);
und ich hatte einige solcher Klassen, so meine 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
Sie können so viele Logger haben, wie Sie es wünschen. Aber es ist besser, Sie haben einen für jedes Paket, das Sie anders protokollieren müssen. Dann erhalten alle Klassen in diesem Paket und seinen Unterpaketen den spezifischen Logger. Sie alle können sich den Root-Logger teilen und ihre Log-Daten mit adtivity = "true" an den Root-Logger Appender senden. Hier ein Beispiel:
<?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>
Ich brauche diese Art der Sache zu tun, so dass ich habe einen no-line-feed appender und einen regelmäßigen appender auf die gleiche Datei. Danke für diese Info. – djangofan
IMO additivity = false sollte Standard sein, wenn unterschiedliche appender-ref angegeben ist. Sehr häufig erhalten wir Anwendungen, bei denen einige Module wegen einiger Timer-Ereignisse sehr häufige Protokollgeneratoren sind, und wir möchten diese Protokolle in verschiedene Dateien aufteilen. Das Loggen von 10 verschiedenen Dateien macht keinen Sinn. Es sollte also eine Opt-In-Funktion und keine Standard-Funktion sein. Seit logback war ein Umschreiben der gleiche Fehler vom selben Autor korrigiert werden sollte. –
Ich möchte Fehler, Debug, Info Nachrichten in verschiedenen Dateien jeweils protokollieren. Ist es möglich mit logback.xml – Qasim