說說如何配置 log4j 日誌(xml 方式)

1 日誌等級
log4j 日誌等級分為五級:
等級 | 說明 |
---|---|
DEBUG | 除錯(細粒度)。 |
INFO | 應用程式的執行過程(粗粒度)。 |
WARN | 可能存在潛在錯誤。 |
ERROR | 發生錯誤事件,但不影響系統執行。 |
FATAL | 發生嚴重錯誤事件,導致系統退出。 |
一般只使用到前四種。
2 目標
我們希望這樣管理日誌:
1、日誌放在 logs/web/ 下。
2、日誌檔案分為 debug.log、info.log 以及 error.log。
3、每小時生成一份日誌檔案。
4、debug.log 包含所有級別日誌。
5、info.log 包含除 debug 之外的所有級別日誌。
6、error.log 包含 ERROR、FATAL 日誌。
3 配置
配置檔案 xxx.xml,放置在 classes/
:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration> <!-- 控制檯日誌--> <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p]:[%c][%M] \ [%l] [%m] %n"/> </layout> </appender> <!-- DEBUG 級別日誌--> <appender name="debugAppender" class="org.apache.log4j.DailyRollingFileAppender"> <!-- 日誌輸出路徑--> <param name="File" value="${catalina.base}/logs/web/debug.log"/> <!-- 每小時生成一個新日誌--> <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'"/> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 最低級別--> <param name="levelMin" value="DEBUG"/> </filter> <!-- 日誌輸出格式--> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p]: [%c][%M][%l] [%m] %n"/> </layout> </appender> <!-- INFO 級別日誌--> <appender name="infoAppender" class="org.apache.log4j.DailyRollingFileAppender"> <!-- 日誌輸出路徑--> <param name="File" value="${catalina.base}/logs/web/info.log"/> <!-- 每小時生成一個新日誌--> <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'"/> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 最低級別--> <param name="levelMin" value="INFO"/> </filter> <!-- 日誌輸出格式--> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p]: [%c][%M][%l] [%m] %n"/> </layout> </appender> <!-- Error 級別日誌--> <appender name="errorAppender" class="org.apache.log4j.DailyRollingFileAppender"> <!-- 日誌輸出路徑--> <param name="File" value="${catalina.base}/logs/web/error.log"/> <!-- 每小時生成一個新日誌--> <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'"/> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 最低級別--> <param name="levelMin" value="ERROR"/> </filter> <!-- 日誌輸出格式--> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p]: [%c][%M][%l] [%m] %n"/> </layout> </appender> <root> <priority value="debug"/> <appender-ref ref="ConsoleAppender"/> <appender-ref ref="debugAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="errorAppender"/> </root> </log4j:configuration>
4 輸出器
輸出器 | 說明 |
---|---|
ConsoleAppender | 控制檯。 |
FileAppender | 檔案。 |
RollingFileAppender | 檔案,當檔案大小達到一定閾值時,自動備份。 |
DailyRollingFileAppender | 檔案,可設定定期備份策略。 |
WriterAppender | 將日誌資訊以流格式傳送到指定位置。 |
5 輸出格式
格式 | 說明 |
---|---|
%c | 輸出日誌資訊所屬的類的全名 |
%d | 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28 |
%f | 輸出日誌資訊所屬的類的類名 |
%l | 輸出日誌事件的發生位置,即輸出日誌資訊的語句處於它所在的類的第幾行 |
%m | 輸出程式碼中指定的資訊,如log(message)中的message |
%n | 輸出一個回車換行符,Windows平臺為“/r/n”,Unix平臺為“/n” |
%p | 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL。如果是呼叫debug()輸出的,則為DEBUG,依此類推 |
%r | 輸出自應用啟動到輸出該日誌資訊所耗費的毫秒數 |
%t | 輸出產生該日誌事件的執行緒名 |
6 DatePattern
DailyRollingFileAppender 中可以設定日誌生成的時間頻度(DatePattern),格式如下:
時間頻度 | 格式 |
---|---|
每月 | yyyy-MM |
每週 | yyyy-ww |
每天 | yyyy-MM-dd |
每半天 | yyyy-MM-dd-a |
每小時 | yyyy-MM-dd-HH |
每分鐘 | yyyy-MM-dd-HH-mm |
形如:
<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'"/>
注意:
1、不在表中的字元,必須寫在 ''
之間。
2、必須遵循作業系統資料夾的命名規範。
如果不遵守這些規則,可是會靜默失敗的哦O(∩_∩)O~
7 LevelRangeFilter
每一個 appender,都可以配置一個 LevelRangeFilter(日誌等級過濾器),來指定需要輸出的日誌範圍。
引數 | 說明 |
---|---|
levelMin | 最低等級 |
levelMax | 最高等級 |
等級可選值為:OFF、FATAL、ERROR、WARN、、INFO、DEBUG、TRACE、ALL。
8 日誌輸出路徑
可以使用 ${catalina.base}
來指定 Tomcat 的根目錄。