我正在使用logback/slf4j來執行我的日誌記錄。我想解析我的日誌文件來分析一些數據,所以我不想分析一個偉大的大文件(主要由調試語句組成),而是希望有兩個記錄器實例,每個記錄器實例都記錄到一個單獨的文件中;一個用於分析,另一個用於所有目的日誌記錄。有誰知道這是可能的與Logback,或任何其他記錄器的事情?Logback將不同消息記錄到兩個文件
108
A
回答
223
在logback中這樣做很有可能。下面是一個例子配置:
<?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>
,那麼你會設置兩個獨立的記錄器,一個用於一切,一個記錄分析數據,如下所示:
Logger analytics = LoggerFactory.getLogger("analytics");
1
在我的情況
我想離開的類名作爲登錄名
private static final Logger log = LoggerFactory.getLogger(ScheduledPost.class);
和我有一些這樣的課程,所以我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
您可以擁有任意數量的記錄器。但是,對於每個需要以不同方式記錄的軟件包,最好有一個。然後,該軟件包及其子包中的所有類都將獲得該特定的記錄器。他們都可以共享根記錄器,並使用additivity =「true」將其日誌數據發送到根記錄器appender。這裏有一個例子:
<?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>
相關問題
- 1. 將不同包中的日誌消息記錄到不同的文件中
- 2. 將隊列的消息記錄到文本文件
- 3. SLF4J代碼片段將消息記錄到文件中
- 4. Netty:將消息記錄到文件的正確方法
- 5. Logback不會登錄到文件
- 6. 將消息記錄到JUnit控制檯
- 7. 找不到文件或目錄消息
- 8. Logback僅記錄到控制檯,而不是文件
- 9. 如何將log4j配置爲將不同日誌級別記錄到同一個記錄器的不同文件
- 10. 的log4j不打印調試消息記錄到文件
- 11. 將來自不同用戶會話的日誌消息記錄到不同的日誌文件中
- 12. 如何配置Logback以將記錄器的不同級別記錄到不同的目標?
- 13. 將不同級別記錄到多個文件Python
- 14. 在Timbre中記錄到兩個文件
- 15. 溫斯頓記錄儀記錄到兩個文件
- 16. 比較兩個文件,並將第三個文件中的不同記錄移動到
- 17. 獲取不同於兩個fastq文件的記錄
- 18. 如何將log4php配置爲將不同日誌級別記錄到同一記錄器的不同文件中
- 19. WCF消息記錄
- 20. 將多個串行端口同時記錄到多個文件
- 21. SSIS如何將單個記錄分成兩個不同的記錄?
- 22. 將文件從臨時目錄複製到兩個不同的目錄失敗
- 23. 重定向死亡消息記錄到文件
- 24. log4j的日誌記錄到一個記錄器兩個不同的文件只有
- 25. 將消息發送到不同線程
- 26. Picamera將視頻記錄到不同的文件中錯誤
- 27. HAProxy將只記錄啓動消息
- 28. 將activemq駱駝路由消息記錄到專用日誌文件
- 29. 用Roxygen在同一個文件中記錄兩個S3方法
- 30. 使用同一個對象記錄不同的級別到不同的文件
我需要做這樣的事情,這樣我可以有一個不需要行飼料添加器和常規的appender到同一個文件。感謝這個信息。 – djangofan 2013-01-16 17:31:17
如果指定了不同的appender-ref,IMO additivity = false應爲默認值。很多時候我們會得到一些應用程序,其中一些模塊由於某些計時器事件而會非常頻繁地生成日誌,我們希望將這些日誌分成不同的文件。 在10個不同的文件中記錄相同的日誌確實沒有意義。所以它應該是一個非默認選項。 由於logback是一個重寫,同一個作者應該修正相同的錯誤。 – 2015-03-23 07:39:47
我想分別在不同的文件中記錄錯誤,調試,信息消息。這是可能的與logback.xml – Qasim 2015-06-07 14:20:37