簡體   English   中英

使用 log4j 創建多個不同內容的日志文件

[英]Creating multiple log files of different content with log4j

有沒有辦法配置 log4j 以便它向不同的 appender 輸出不同級別的日志記錄?

我正在嘗試設置多個日志文件。 主日志文件將捕獲所有類的所有 INFO 及以上消息。 (在開發中,它將捕獲所有 DEBUG 及以上消息,並針對特定類進行 TRACE。)

然后,我想要一個單獨的日志文件。 該日志文件將捕獲特定類子集的所有調試消息,並忽略任何其他類的所有消息。

有沒有辦法得到我所追求的?

這應該讓你開始:

log4j.rootLogger=QuietAppender, LoudAppender, TRACE
# setup A1
log4j.appender.QuietAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QuietAppender.Threshold=INFO
log4j.appender.QuietAppender.File=quiet.log
...


# setup A2
log4j.appender.LoudAppender=org.apache.log4j.RollingFileAppender
log4j.appender.LoudAppender.Threshold=DEBUG
log4j.appender.LoudAppender.File=loud.log
...

log4j.logger.com.yourpackage.yourclazz=TRACE

也許像這樣?

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 <!-- general application log -->
 <appender name="MainLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="server.log" />
  <param name="Threshold" value="INFO" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender> 
 <!-- additional fooSystem logging -->
 <appender name="FooLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="foo.log" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender>
 <!-- foo logging -->
 <logger name="com.example.foo">
  <level value="DEBUG"/>
  <appender-ref ref="FooLogFile"/>
 </logger>
 <!-- default logging -->
 <root>
  <level value="INFO"/>
  <appender-ref ref="MainLogFile"/>
 </root>
</log4j:configuration>

因此,所有信息消息都寫入 server.log; 相比之下, foo.log 只包含 com.example.foo 消息,包括調試級別的消息。

我有這個問題,但有一個轉折 - 我試圖將不同的內容記錄到不同的文件中。 我有關於 LowLevel 調試日志和 HighLevel 用戶日志的信息。 我希望 LowLevel 只訪問一個文件,HighLevel 訪問一個文件和一個 syslogd。

我的解決方案是配置 3 個 appender,然后像這樣設置日志記錄:

log4j.threshold=ALL
log4j.rootLogger=,LowLogger

log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false

我很難弄清楚的部分是“log4j.logger”可以列出多個附加程序。 我試圖一次做一行。

希望這在某些時候可以幫助某人!

對於主日志文件/附加程序,設置一個.Threshold = INFO以將附加程序中實際記錄的內容限制為 INFO 及以上,無論記錄器是否啟用了調試、跟蹤等。

至於捕獲 DEBUG 以及除此之外的任何內容……您可能必須編寫自定義附加程序。

但是我建議不要這樣做,因為這聽起來會使故障排除和分析變得非常困難:

  1. 如果您的目標是擁有一個文件,您可以在其中查找故障排除,那么跨越不同文件的日志數據會很煩人 - 除非您有非常嚴格的日志記錄策略,否則您可能需要來自 DEBUG 和 INFO 的內容能夠有效地跟蹤有問題的代碼的執行。
  2. 通過仍然記錄所有調試消息,您將失去通常通過關閉日志記錄(方式)在生產系統中獲得的任何性能提升。

演示鏈接: https : //github.com/RazvanSebastian/spring_multiple_log_files_demo.git

我的解決方案基於使用spring-boot-starter-log4j XML 配置。 該示例是使用spring-boot-starter的基本示例,兩個 Logger 寫入不同的日志文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM