1. 程式人生 > >log4j2配置詳解(節點和輸出格式)

log4j2配置詳解(節點和輸出格式)

本文章主要詳細介紹log4j2的配置!!

1.配置檔案節點解析 

    (1).根節點Configuration有兩個屬性:status和monitorinterval,有兩個子節點:Appenders和Loggers(表明可以定義多個Appender和Logger).
       status用來指定log4j本身的列印日誌的級別.
       monitorinterval用於指定log4j自動重新配置的監測間隔時間,單位是s,最小是5s.


    (2).Appenders節點,常見的有三種子節點:Console、RollingFile、File.
       Console節點用來定義輸出到控制檯的Appender.
        name:指定Appender的名字.
        target:SYSTEM_OUT 或 SYSTEM_ERR,一般只設置預設:SYSTEM_OUT.
        PatternLayout:輸出格式,不設定預設為:%m%n.
       File節點用來定義輸出到指定位置的檔案的Appender.
        name:指定Appender的名字.
        fileName:指定輸出日誌的目的檔案帶全路徑的檔名.
        PatternLayout:輸出格式,不設定預設為:%m%n.
       RollingFile節點用來定義超過指定大小自動刪除舊的建立新的的Appender.
        name:指定Appender的名字.
        fileName:指定輸出日誌的目的檔案帶全路徑的檔名.
        PatternLayout:輸出格式,不設定預設為:%m%n.
        filePattern:指定新建日誌檔案的名稱格式.
        Policies:指定滾動日誌的策略,就是什麼時候進行新建日誌檔案輸出日誌.
          TimeBasedTriggeringPolicy:Policies子節點,基於時間的滾動策略,interval屬性用來指定多久滾動一次,預設是1 hour。modulate=true用來調整時間:比如現在是早上3am,interval是4,那麼第一次滾動是在4am,接著是8am,12am...而不是7am.
        SizeBasedTriggeringPolicy:Policies子節點,基於指定檔案大小的滾動策略,size屬性用來定義每個日誌檔案的大小.
        DefaultRolloverStrategy:用來指定同一個資料夾下最多有幾個日誌檔案時開始刪除最舊的,建立新的(通過max屬性),預設是7個檔案。

    (3).Loggers節點,常見的有兩種:Root和Logger.
       Root節點用來指定專案的根日誌,如果沒有單獨指定Logger,那麼就會預設使用該Root日誌輸出
         level:日誌輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
         AppenderRef:Root的子節點,用來指定該日誌輸出到哪個Appender.
       Logger節點用來單獨指定日誌的形式,比如要為指定包下的class指定不同的日誌級別等。
         level:日誌輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
         name:用來指定該Logger所適用的類或者類所在的包全路徑,繼承自Root節點.
         AppenderRef:Logger的子節點,用來指定該日誌輸出到哪個Appender,如果沒有指定,就會預設繼承自Root.如果指定了,那麼會在指定的這個Appender和Root的Appender中都會輸出,此時我們可以設定Logger的additivity="false"只在自定義的Appender中進行輸出。

    (4).關於日誌level.
      共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
      All:最低等級的,用於開啟所有日誌記錄.
      Trace:是追蹤,就是程式推進以下,你就可以寫個trace輸出,所以trace應該會特別多,不過沒關係,我們可以設定最低日誌級別不讓他輸出.
      Debug:指出細粒度資訊事件對除錯應用程式是非常有幫助的.
      Info:訊息在粗粒度級別上突出強調應用程式的執行過程.
      Warn:輸出警告及warn以下級別的日誌.
      Error:輸出錯誤資訊日誌.
      Fatal:輸出每個嚴重的錯誤事件將會導致應用程式的退出的日誌.
      OFF:最高等級的,用於關閉所有日誌記錄.

2.輸出格式詳解:

%c 列出logger名字空間的全稱,如果加上{<層數>}表示列出從最內層算起的指定層數的名字空間 log4j配置檔案引數舉例 輸出顯示媒介
假設當前logger名字空間是"a.b.c"
%c a.b.c
%c{2} b.c
%20c (若名字空間長度小於20,則左邊用空格填充)
%-20c (若名字空間長度小於20,則右邊用空格填充)
%.30c (若名字空間長度超過30,截去多餘字元)
%20.30c (若名字空間長度小於20,則左邊用空格填充;若名字空間長度超過30,截去多餘字元)
%-20.30c (若名字空間長度小於20,則右邊用空格填充;若名字空間長度超過30,截去多餘字元)
%C 列出呼叫logger的類的全名(包含包路徑) 假設當前類是"org.apache.xyz.SomeClass"
%C org.apache.xyz.SomeClass
%C{1} SomeClass
%d 顯示日誌記錄時間,{<日期格式>}使用ISO8601定義的日期格式 %d{yyyy/MM/dd HH:mm:ss,SSS} 2005/10/12 22:23:30,117
%d{ABSOLUTE} 22:23:30,117
%d{DATE} 12 Oct 2005 22:23:30,117
%d{ISO8601} 2005-10-12 22:23:30,117
%F 顯示呼叫logger的原始檔名 %F MyClass.java
%l 輸出日誌事件的發生位置,包括類目名、發生的執行緒,以及在程式碼中的行數 %l MyClass.main(MyClass.java:129)
%L 顯示呼叫logger的程式碼行 %L 129
%m 顯示輸出訊息 %m This is a message for debug.
%M 顯示呼叫logger的方法名 %M main
%n 當前平臺下的換行符 %n Windows平臺下表示rn
UNIX平臺下表示n
%p 顯示該條日誌的優先順序 %p INFO
%r 顯示從程式啟動時到記錄該條日誌時已經經過的毫秒數 %r 1215
%t 輸出產生該日誌事件的執行緒名 %t MyClass
%x 按NDC(Nested Diagnostic Context,執行緒堆疊)順序輸出日誌 假設某程式呼叫順序是MyApp呼叫com.foo.Bar
%c %x - %m%n MyApp - Call com.foo.Bar.
com.foo.Bar - Log in Bar
MyApp - Return to MyApp.
%X 按MDC(Mapped Diagnostic Context,執行緒對映表)輸出日誌。通常用於多個客戶端連線同一臺伺服器,方便伺服器區分是那個客戶端訪問留下來的日誌。 %X{5} (記錄代號為5的客戶端的日誌)
%% 顯示一個百分號 %% %

一個比較全的模版:

<?xml version="1.0" encoding="UTF-8"?>
 <!--Configuration後面的status,這個用於設定log4j2自身內部的資訊輸出,可以不設定-->
 <!--monitorInterval:Log4j能夠自動檢測修改配置 檔案和重新配置本身,設定間隔秒數-->
 <configuration status="WARN" monitorInterval="30">
    <!--先定義所有的appender-->
     <appenders>
		<!--輸出到控制檯-->
         <console name="Console" target="SYSTEM_OUT">
         <!--輸出日誌的格式-->
             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
         </console>
		<!--列印到檔案中,這個log每次執行程式會自動清空,由append屬性決定-->
		<File name="log" fileName="log/test.log" append="false">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
		 </File>
		<!--檔案滾動, 這個會打印出所有的info及以下級別的資訊,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔-->
         <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
             <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)-->        
             <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
             <Policies>
				 <DefaultRolloverStrategy max="20"/>   <!--資料夾下最多的檔案個數-->
                 <TimeBasedTriggeringPolicy interval="2 hour"/>			<!--多長時間滾動一次-->
                 <SizeBasedTriggeringPolicy size="100 MB"/>		<!-- 一個日誌檔案的最大大小 -->
             </Policies>
         </RollingFile>
        
         
     </appenders>
     <!--然後定義logger,只有定義了logger並引入的appender,appender才會生效-->
     <loggers>
         <!--過濾掉spring和mybatis的一些無用的DEBUG資訊-->
        <logger name="org.springframework" level="INFO"></logger>
         <logger name="org.mybatis" level="INFO"></logger>
         <root level="all">		 
            <appender-ref ref="Console"/>
             <appender-ref ref="RollingFileInfo"/>
             <appender-ref ref="RollingFileWarn"/>
             <appender-ref ref="RollingFileError"/>
         </root>
     </loggers>
 </configuration>
 
 



參考文章:  

http://www.cnblogs.com/hafiz/p/6170702.html

http://blog.csdn.net/u012729481/article/details/21094003