logback節點配置詳解

一 :根節點  <configuration></configuration>

屬性 :
debug : 默認爲false ,設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。
scan : 配置文件若是發生改變,將會從新加載,默認值爲true;
scanPeriod : 檢測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位時毫秒,當scan爲true時,這個屬性生效,默認時間間隔爲1min。
 
<?xml version="1.0" encoding="utf-8"?>
1
<configuration debug="true" scan="true" scanPeriod="2"> 2 <!--TODO : 子節點信息--> 3 </configuration>

能夠這樣描述配置文件的基本結構:以<configuration>開頭,後面有零
個或多個<appender>元素,有零個或多個<logger>元素,有最多一個<root>元素html

 

二:<configuration> 子節點

1 : <appender></appender>
2 : <logger></logger>
3 : <root></root>
 
1.1 <appender>  是  <configuration> 的子節點,是負責寫日誌的組件
 

 

appender 有兩個必要屬性 name ,class 。name指定appender 的名稱, class 指定appender的全限定名
class 包括 :ch.qos.logback.core.ConsoleAppender / ch.qos.logback.core.FileAppender/ ch.qos.logback.core.RollingFileAppender 
   <?xml version="1.0" encoding="utf-8"?> 
1
<configuration debug="true" scan="true" scanPeriod="2"> 2 <!-- conf consoel out --> 3 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender"> 4 </appender> 5 6 <!-- conf file out --> 7 <appender name="file_out" class="ch.qos.logback.core.FileAppender"> 8 </appender> 9 10 <!-- conf file out --> 11 <appender name="file_out" class="ch.qos.logback.core.RollingFileAppender"> 12 </appender> 13 14 <root></root> 15 <loger></loger> 16 </configuration>
1.1.1 :ConsoleAppender
把日誌添加到控制檯,有以下節點:
<encoder> : 對日誌進行格式化。
<target> : 字符串System.out 或者 System.err, 默認 System.out;
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4   <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <encoder>
 6             <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
 7         </encoder>
 8   </appender>
 9 
10   <root level="INFO">             
11     <appender-ref ref="console_out" />   
12   </root>     
13 </configuration>
1.1.2 : FileAppender
把日誌添加到文件,有以下節點:
<file>        : 被寫入的文件名,能夠是相對目錄 , 也能夠是絕對目錄 , 若是目錄不存在則會自動建立
<append>  : 若是是true , 日誌被追加到文件結尾 , 若是是false,清空現存文件 , 默認是true
<encoder> : 對日誌進行格式化  [具體的轉換符說明請參見官網.]
<prodent> : 若是是true,日誌會被安全的寫入文件 , 即便其餘的FileAppender也會向此文件作寫入操做 , 默認是false
 
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4     <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <encoder>
 6             <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
 7         </encoder>
 8     </appender>
 9 
10     <!-- conf file out -->
11     <appender name="file_out" class="ch.qos.logback.core.FileAppender">
12         <file>logs/debug.log</file>
13         <encoder>
14             <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
15         </encoder>
16     </appender>
17 </configuration>
1.1.3 : RollingFileAppender [經常使用]
滾動紀錄文件,先將日誌記錄到指定文件,當符合某種條件時,將日誌記錄到其餘文件,有以下節點:
<file> : 被寫入的文件名,能夠是相對目錄,也能夠解決目錄,若是目錄不存在則自動建立。
<append> : 若是是true,日誌被追加到文件結尾,若是是false,清空現存文件,默認是true;
<encoder> : 對日誌進行格式化  [具體的轉換符說明請參見官網.]
<rollingPolicy> : 當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名。
  • 1.1.3.1 :
    TimeBaseRollingPolicy :最經常使用的滾動策略,根據時間來制定滾動策略,即負責滾動也負責觸發滾動。有以下節點;
   1) : <fileNamePattern> 
   必要節點,包含文件及「%d」 轉換符,「%d」能夠包含一個java.text.SimpleDateFormat 制定的時間格式,如:%d{yyyy-MM},若是直接使用 %d ,默認格式是 yyyy-MM-dd。
  RollingFileAppender 的file 子節點無關緊要,經過設置file,能夠爲活動文件和歸檔文件制定不一樣位置,當前日誌老是紀錄到file指定的文件,活動文件的名稱不會改變,若是沒有設置file,活         動文件      的名稱會根據fileNamePattern的值,每隔一段時間改變一次,「/」或者「\」 會被看成目錄分隔符。
  2) :<maxHistory>
  可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件,假設設置每月滾動,且<maxHistory> 是 6,則只保存最近6個月的文件,刪除以前的舊文件,注意:刪除舊文件是哪些爲了歸檔而建立的目錄也會被刪除。
  3) :<filenamePattern>
   必須包含「%i」 例如:設置最小值,和最大值分別爲1和2,命名模式爲 log%i.log,會產生歸檔文件log1.log和log2.log,還能夠指定文件壓縮選項,例如:log%i.log.gz 或者 log%i.log.zip
  4) :<triggeringPolicy> :
  告知RollingFileAppender   激活RollingFileAppender滾動
 1     <!-- 03:conf errorAppender out -->
 2     <appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender">
 3         <file>logs/error.log</file>
 4         <!-- 設置滾動策略 -->
 5         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
 6             <!--設置日誌命名模式--> 
 7             <fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern>
 8             <!--最多保留30天log-->
 9             <maxHistory>30</maxHistory>
10         </rollingPolicy>
11         <!-- 超過150MB時,觸發滾動策略 -->
12         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
13             <maxFileSize>150</maxFileSize>
14         </triggeringPolicy>
15         <encoder>
16             <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
17         </encoder>
18     </appender>
  •  1.1.3.2 :
   SizeBasedTriggeringPolicy : 查看當前活動文件的大小 , 若是超過指定大小會告知 RollingFileAppender , 觸發當前活動滾動 , 只有一個節點 , 用來規定文件大小
   <maxFileSize> : 活動文件的大小 , 默認10MB
   <prudent>:當爲true時 , 不支持FixedWindowRollingPolicy , 支持TimeBasedRollingPolicy , 可是有兩個限制 , 1不支持也不容許文件壓縮 , 2不能設置file屬性 . 必須留空
 
至此  , Appender 節點已經介紹完畢.

2.1 : logger 節點

logger 是 <configuration> 的子節點
來設置某一個包或者具體的某一個類的日誌打印級別,以及指定<appender>, logger 僅有一個name屬性,兩個可選屬性 level/addtivity 
name : 用來指定受此loger約束的某一個包或者具體的某一個類
level:用來設置打印級別,大小寫無關,TRACE,DEBUG,INFO,WARE,ERROR,ALL和OFF,還有一個特俗值INHERITED 或者 同義詞NULL,表明強制執行上級的級別。
         若是未設置此屬性,那麼當前logger將會繼承上級的級別。
         level 大小 : 
         ERROR > WARN > INFO > DEBUG > TRACE
         程序會打印高於或等於所設置級別的日誌
addtivity : 是否向上級loger傳遞打印信息,默認爲true;
<loger> 能夠包含零個或多個<appender-ref>元素,表示這個appender將會添加到loger
  
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4     <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <filter class="ch.qos.logback.classic.filter.LevelFilter">
 6             <!-- 過濾掉非INFO級別 -->
 7             <level>INFO</level>
 8             <onMatch>ACCEPT</onMatch>
 9             <onMismatch>DENY</onMismatch>
10         </filter>
11     </appender>
12 
13     <!--  conf infoAppender out -->
14     <appender name="infoAppender" class="ch.qos.logback.core.RollingFileAppender">
15         
16         <file>logs/info.log</file>
17         <!-- 設置滾動策略 -->
18         <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
19             <!--設置日誌命名模式--> 
20             <fileNamePattern>infoFile.%d{yyyy-MM-dd}.log</fileNamePattern>
21             <!--最多保留30天log-->
22             <maxHistory>30</maxHistory>
23         </rollingPoliy>
24         <!-- 超過150MB時,觸發滾動策略 -->
25         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
26             <maxFileSize>150</maxFileSize>
27         </triggeringPolicy>
28         <encoder>
29             <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
30         </encoder>
31     </appender>
32  
33     <!-- 指定在logback.olf.log包中的log -->
34     <logger name="logback.olf.log" level="info">
35         <appender-ref ref = "console_out"/>
36         <appender-ref ref = "infoAppender"/>
37     </logger>
38 </configuration>
View Code
2.2 : root 節點
元素配置根 logger。該元素有一個 level 屬性。沒有 name 屬性,由於已經被命名 爲「root」
Level 屬性的值大小寫無關,其值爲下面其中一個字符串:TRACE、DEBUG、INFO、 WARN、ERROR、ALL 和 OFF。注意不能設置爲「INHERITED」 或「NULL」。 元素能夠包含零個或多個元素。與元素相似,聲明 元素後,會先關閉而後移除所有當前 appender,只引用聲明瞭的 appender。若是 root 元素沒 有引用任何 appender,就會失去全部 appender。 
以下完整案例配置 : 
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4     <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <filter class="ch.qos.logback.classic.filter.LevelFilter">
 6             <!-- 過濾掉非INFO級別 -->
 7             <level>INFO</level>
 8             <onMatch>ACCEPT</onMatch>
 9             <onMismatch>DENY</onMismatch>
10         </filter>
11     </appender>
12 
13     <!-- 01:conf infoAppender out -->
14     <appender name="infoAppender" class="ch.qos.logback.core.RollingFileAppender">
15         
16         <file>logs/info.log</file>
17         <!-- 設置滾動策略 -->
18         <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
19             <!--設置日誌命名模式--> 
20             <fileNamePattern>infoFile.%d{yyyy-MM-dd}.log</fileNamePattern>
21             <!--最多保留30天log-->
22             <maxHistory>30</maxHistory>
23         </rollingPoliy>
24         <!-- 超過150MB時,觸發滾動策略 -->
25         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
26             <maxFileSize>150</maxFileSize>
27         </triggeringPolicy>
28         <encoder>
29             <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
30         </encoder>
31     </appender>
32 
33     <!-- 02:conf debugAppender out -->
34     <appender name="debugAppender" class="ch.qos.logback.core.RollingFileAppender">
35         <file>logs/debug.log</file>
36         <!-- 設置滾動策略 -->
37         <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
38             <!--設置日誌命名模式--> 
39             <fileNamePattern>debugFile.%d{yyyy-MM-dd}.log</fileNamePattern>
40             <!--最多保留30天log-->
41             <maxHistory>30</maxHistory>
42         </rollingPoliy>
43         <!-- 超過150MB時,觸發滾動策略 -->
44         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
45             <maxFileSize>150</maxFileSize>
46         </triggeringPolicy>
47         <encoder>
48             <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
49         </encoder>
50     </appender>
51 
52     <!-- 03:conf errorAppender out -->
53     <appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender">
54         <file>logs/error.log</file>
55         <!-- 設置滾動策略 -->
56         <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
57             <!--設置日誌命名模式--> 
58             <fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern>
59             <!--最多保留30天log-->
60             <maxHistory>30</maxHistory>
61         </rollingPoliy>
62         <!-- 超過150MB時,觸發滾動策略 -->
63         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
64             <maxFileSize>150</maxFileSize>
65         </triggeringPolicy>
66         <encoder>
67             <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
68         </encoder>
69     </appender>
70  
71     <root level="ALL">
72         <appender-ref ref="infoAppender"/>
73         <appender-ref ref="debugAppender"/>
74         <appender-ref ref="errorAppender"/>
75     </root>
76 </configuration>
View Code

三 : <filter> 過濾節點

Logback 的過濾器基於三值邏輯(ternary logic),容許把它們組裝或成鏈,從而組成任 意的複合過濾策略。
這裏的所謂三值邏輯是說,過濾器的返回值只能是 ACCEPT、DENY 和 NEUTRAL 的其中一個。
過濾器通常分爲以下幾類 :
3.1 : 級別過濾器(LevelFilter)
LevelFilter 根據記錄級別對記錄事件進行過濾。若是事件的級別等於配置的級別,過濾 器會根據 onMatch 和 onMismatch 屬性接受或拒絕事件。下面是個配置文件例子:
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4     <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <filter class="ch.qos.logback.classic.filter.LevelFilter">
 6             <!-- 過濾掉非INFO級別 -->
 7             <level>INFO</level>
 8             <onMatch>ACCEPT</onMatch>
 9             <onMismatch>DENY</onMismatch>
10         </filter>
11         
12         <encoder>
13             <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
14         </encoder>
15     </appender>
16     <root level="DEBUG">
17         <appender-ref ref="console_out" />
18     </root>
19 </configuration>

3.2 : 臨界值過濾器(ThresholdFilter)java

ThresholdFilter 過濾掉低於指定臨界值的事件 . 當記錄的級別等於或高於臨界值時 , ThresholdFilter 的decide()方法會返回NEUTRAL ; 當記錄級別低於臨界值時 , 事件會被拒絕 下面是個配置文件例子 : express

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4     <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
        <!-- 過濾掉TRACE和DEBUG級別的日誌 --> 6 <level>INFO</level> 7 </filter> 8 9 <encoder> 10 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern> 11 </encoder> 12 </appender> 13 <root level="DEBUG"> 14 <appender-ref ref="console_out" /> 15 </root> 16 </configuration>

3.3 : 求值過濾器(EvaluatorFilter)安全

EvaluatorFilter 封裝了 EventEvaluator(ch.qos.logback.core.boolex.EventEvaluator) , 評估 是否符合指定的條件app

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4     <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <filter class="ch.qos.logback.classic.filter.EvaluatorFilter">  
 6              <evaluator>
 7              <!--過濾掉全部日誌中不包含hello字符的日誌-->
 8                 <expression>
 9                     message.contains("hello")
10                 </expression>
11                 <onMatch>NEUTRAL</onMatch>
12                 <onMismatch>DENY</onMismatch>
13              </evaluator>
14         </filter>
15         
16         <encoder>
17             <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
18         </encoder>
19     </appender>
20     <root level="DEBUG">
21         <appender-ref ref="console_out" />
22     </root>
23 </configuration>

 3.4 : 匹配器(Matchers)ide

儘管能經過調用 String 類的 matches()方法進行模式匹配,但這會致使每次調用過濾器 時都會建立一個全新的 Pattern 對象。爲消除這種開銷,你能夠預先定義一個或多個 Matcher 對象。一旦定義 matcher 後,就能夠在求值表達式裏重複引用它。lua

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <!-- conf consoel out -->
 4     <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
 5         <filter class="ch.qos.logback.classic.filter.EvaluatorFilter">  
 6              <evaluator> 
 7                 <matcher>
 8                     <Name>odd</Name>
 9                     <!-- 過濾掉序號爲奇數的語句-->
10                     <regex>statement [13579]</regex>
11                 </matcher>
12                 <expression>odd.matches(formattedMessage)</expression>
13                 <onMatch>NEUTRAL</onMatch>
14                 <onMismatch>DENY</onMismatch>
15              </evaluator>
16         </filter>
17         
18         <encoder>
19             <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
20         </encoder>
21     </appender>
22     <root level="DEBUG">
23         <appender-ref ref="console_out" />
24     </root>
25 </configuration>

logback 執行流程 :spa

1 : 得到過濾鏈的策略線程

依據過濾器鏈返回的結果作出不一樣的響應。共有三個響應結果:
FilterReply.DENY, 直接退出,不執行後續流程
FilterReply.NEUTRA,繼續向下執行
FilterReply.ACCEPT,不進行步驟二,即類型輸出類型檢查debug

2 : 執行基本的選擇規則

主要是比較下level,若是級別低直接退出後續執行

3 : 建立LoggingEvent對象

這個對象包裹一些基本信息,包括日誌界別,信息自己,可能的異常信息,執行時間,執行線程,其實一些隨日誌請求一塊兒發出的數據和MDC。其中MDC是用來裝一些額外的上下文信息的。

4 : 調用appenders

此時logback會調用appender的doAppender,若是appender裏有一些filer的話,此時也會調用

5 : 格式化輸出結果

一般狀況下都是由layout層將event格式化成String型。固然也有意外好比說SocketAppender就是將event格式化成流。

6 : .輸出LoggingEvent

將格式化好的結果,輸出到appender中記錄的地址

注 : 標準logback .xml 配置 詳見樓主另外一篇博文

http://www.cnblogs.com/DeepLearing/p/5664941.html

可用於紀錄多文件。

相關文章
相關標籤/搜索