logback.xml配置詳解

以下內容轉載自http://blog.csdn.net/haidage/article/details/6794509 http://blog.csdn.net/haidage/article/details/6794529
http://blog.csdn.net/haidage/article/details/6794540

一:根節點<configuration>包含的屬性:
 
scan:
當此屬性設置爲true時,配置文件如果發生改變,將會被重新加載,默認值爲true。
scanPeriod:
設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。
debug:
當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。
例如:
 
 
Xml代碼  
  1. <configuration scan="true" scanPeriod="60 seconds" debug="false">  
  2.       <!-- 其他配置省略-->  
  3. </configuration>  
 
 

二:根節點<configuration>的子節點:
 
2.1設置上下文名稱:<contextName>
每個logger都關聯到logger上下文,默認上下文名稱爲“default”。但可以使用<contextName>設置成其他名字,用於區分不同應用程序的記錄。一旦設置,不能修改。
 
 
Xml代碼  
  1. <configuration scan="true" scanPeriod="60 seconds" debug="false">  
  2.       <contextName>myAppName</contextName>  
  3.       <!-- 其他配置省略-->  
  4. </configuration>  
 
 
2.2設置變量: <property>
用來定義變量值的標籤,<property> 有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。通過<property>定義的值會被插入到logger上下文中。定義變量後,可以使“${}”來使用變量。
例如使用<property>定義上下文名稱,然後在<contentName>設置logger上下文時使用。
 
Xml代碼  
  1. <configuration scan="true" scanPeriod="60 seconds" debug="false">  
  2.       <property name="APP_Name" value="myAppName" />   
  3.       <contextName>${APP_Name}</contextName>  
  4.       <!-- 其他配置省略-->  
  5. </configuration>   
 
 
 
2.3獲取時間戳字符串:<timestamp>
兩個屬性 key:標識此<timestamp> 的名字;datePattern:設置將當前時間(解析配置文件的時間)轉換爲字符串的模式,遵循java.txt.SimpleDateFormat的格式。
        例如將解析配置文件的時間作爲上下文名稱:
 
Xml代碼  
  1. <configuration scan="true" scanPeriod="60 seconds" debug="false">  
  2.       <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>   
  3.       <contextName>${bySecond}</contextName>  
  4.       <!-- 其他配置省略-->  
  5. </configuration>   
 
 
2.4設置loger:
<loger>
用來設置某一個包或者具體的某一個類的日誌打印級別、以及指定<appender>。<loger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。
name:
用來指定受此loger約束的某一個包或者具體的某一個類。
level:
用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。
如果未設置此屬性,那麼當前loger將會繼承上級的級別。
addtivity:
是否向上級loger傳遞打印信息。默認是true。
<loger>可以包含零個或多個<appender-ref>元素,標識這個appender將會添加到這個loger。
 
<root>
也是<loger>元素,但是它是根loger。只有一個level屬性,應爲已經被命名爲"root".
level:
用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置爲INHERITED或者同義詞NULL。
默認是DEBUG。
<root>可以包含零個或多個<appender-ref>元素,標識這個appender將會添加到這個loger。
 
例如:
LogbackDemo.java類
 
Java代碼  
  1. package logback;  
  2.   
  3. import org.slf4j.Logger;  
  4. import org.slf4j.LoggerFactory;  
  5.   
  6. public class LogbackDemo {  
  7.     private static Logger log = LoggerFactory.getLogger(LogbackDemo.class);  
  8.     public static void main(String[] args) {  
  9.         log.trace("======trace");  
  10.         log.debug("======debug");  
  11.         log.info("======info");  
  12.         log.warn("======warn");  
  13.         log.error("======error");  
  14.     }  
  15. }  
 
 
logback.xml配置文件
 
第1種:只配置root
 
Xml代碼  
  1. <configuration>   
  2.    
  3.   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
  4.     <!-- encoder 默認配置爲PatternLayoutEncoder -->   
  5.     <encoder>   
  6.       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
  7.     </encoder>   
  8.   </appender>   
  9.    
  10.   <root level="INFO">             
  11.     <appender-ref ref="STDOUT" />   
  12.   </root>     
  13.      
  14.  </configuration>  
 
 其中appender的配置表示打印到控制檯(稍後詳細講解appender );
<root level="INFO">將root的打印級別設置爲“INFO”,指定了名字爲“STDOUT”的appender。
 
當執行logback.LogbackDemo類的main方法時,root將級別爲“INFO”及大於“INFO”的日誌信息交給已經配置好的名爲“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制檯;
打印結果如下:
 
Xml代碼  
  1. 13:30:38.484 [main] INFO  logback.LogbackDemo - ======info  
  2. 13:30:38.500 [main] WARN  logback.LogbackDemo - ======warn  
  3. 13:30:38.500 [main] ERROR logback.LogbackDemo - ======error  
 
 
  第2種:帶有loger的配置,不指定級別,不指定appender,
 
Xml代碼  
  1. <configuration>   
  2.    
  3.   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
  4.     <!-- encoder 默認配置爲PatternLayoutEncoder -->   
  5.     <encoder>   
  6.       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
  7.     </encoder>   
  8.   </appender>   
  9.    
  10.   <!-- logback爲java中的包 -->   
  11.   <logger name="logback"/>   
  12.    
  13.   <root level="DEBUG">             
  14.     <appender-ref ref="STDOUT" />   
  15.   </root>     
  16.      
  17.  </configuration>  
 
 其中appender的配置表示打印到控制檯(稍後詳細講解appender );
<logger name="logback" />將控制logback包下的所有類的日誌的打印,但是並沒用設置打印級別,所以繼承他的上級<root>的日誌級別“DEBUG”;
沒有設置addtivity,默認爲true,將此loger的打印信息向上級傳遞;
沒有設置appender,此loger本身不打印任何信息。
<root level="DEBUG">將root的打印級別設置爲“DEBUG”,指定了名字爲“STDOUT”的appender。
 
當執行logback.LogbackDemo類的main方法時,因爲LogbackDemo 在包logback中,所以首先執行<logger name="logback" />,將級別爲“DEBUG”及大於“DEBUG”的日誌信息傳遞給root,本身並不打印;
root接到下級傳遞的信息,交給已經配置好的名爲“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制檯;
打印結果如下:
 
Xml代碼  
  1. 13:19:15.406 [main] DEBUG logback.LogbackDemo - ======debug  
  2. 13:19:15.406 [main] INFO  logback.LogbackDemo - ======info  
  3. 13:19:15.406 [main] WARN  logback.LogbackDemo - ======warn  
  4. 13:19:15.406 [main] ERROR logback.LogbackDemo - ======error  
 
 
 第3種:帶有多個loger的配置,指定級別,指定appender  
 
Xml代碼  
  1. <configuration>   
  2.    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
  3.     <!-- encoder 默認配置爲PatternLayoutEncoder -->   
  4.     <encoder>   
  5.       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
  6.     </encoder>   
  7.   </appender>   
  8.    
  9.   <!-- logback爲java中的包 -->   
  10.   <logger name="logback"/>   
  11.   <!--logback.LogbackDemo:類的全路徑 -->   
  12.   <logger name="logback.LogbackDemo" level="INFO" additivity="false">  
  13.     <appender-ref ref="STDOUT"/>  
  14.   </logger>   
  15.     
  16.   <root level="ERROR">             
  17.     <appender-ref ref="STDOUT" />   
  18.   </root>     
  19. </configuration>  
 
其中appender的配置表示打印到控制檯(稍後詳細講解appender );
 
<logger name="logback" />將控制logback包下的所有類的日誌的打印,但是並沒用設置打印級別,所以繼承他的上級<root>的日誌級別“DEBUG”;
沒有設置addtivity,默認爲true,將此loger的打印信息向上級傳遞;
沒有設置appender,此loger本身不打印任何信息。
 
 <logger name="logback.LogbackDemo" level="INFO" additivity="false">控制logback.LogbackDemo類的日誌打印,打印級別爲“INFO”;
additivity屬性爲false,表示此loger的打印信息不再向上級傳遞,
指定了名字爲“STDOUT”的appender。
 
<root level="DEBUG">將root的打印級別設置爲“ERROR”,指定了名字爲“STDOUT”的appender。
 
 當執行logback.LogbackDemo類的main方法時,先執行<logger name="logback.LogbackDemo" level="INFO" additivity="false">,將級別爲“INFO”及大於“INFO”的日誌信息交給此loger指定的名爲“STDOUT”的appender處理,在控制檯中打出日誌,不再向次loger的上級 <logger name="logback"/> 傳遞打印信息;
<logger name="logback"/>未接到任何打印信息,當然也不會給它的上級root傳遞任何打印信息;
打印結果如下:  
 
Xml代碼  
  1. 14:05:35.937 [main] INFO  logback.LogbackDemo - ======info  
  2. 14:05:35.937 [main] WARN  logback.LogbackDemo - ======warn  
  3. 14:05:35.937 [main] ERROR logback.LogbackDemo - ======error  
 
 如果將<logger name="logback.LogbackDemo" level="INFO" additivity="false">修改爲 <logger name="logback.LogbackDemo" level="INFO" additivity="true">那打印結果將是什麼呢?
沒錯,日誌打印了兩次,想必大家都知道原因了,因爲打印信息向上級傳遞,logger本身打印一次,root接到後又打印一次
打印結果如下:  
 
Xml代碼  
  1. 14:09:01.531 [main] INFO  logback.LogbackDemo - ======info  
  2. 14:09:01.531 [main] INFO  logback.LogbackDemo - ======info  
  3. 14:09:01.531 [main] WARN  logback.LogbackDemo - ======warn  
  4. 14:09:01.531 [main] WARN  logback.LogbackDemo - ======warn  
  5. 14:09:01.531 [main] ERROR logback.LogbackDemo - ======error  
  6. 14:09:01.531 [main] ERROR logback.LogbackDemo - ======error  



logback 常用配置詳解(二) <appender>
 
<appender>:
<appender>是<configuration>的子節點,是負責寫日誌的組件。
<appender>有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名。
 
1.ConsoleAppender:
把日誌添加到控制檯,有以下子節點:
<encoder>:對日誌進行格式化。(具體參數稍後講解 )
<target>:字符串 System.out 或者 System.err ,默認 System.out ;
例如:
Xml代碼  
  1. <configuration>  
  2.   
  3.   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
  4.     <encoder>  
  5.       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>  
  6.     </encoder>  
  7.   </appender>  
  8.   
  9.   <root level="DEBUG">  
  10.     <appender-ref ref="STDOUT" />  
  11.   </root>  
  12. </configuration>  
 
2.FileAppender:
把日誌添加到文件,有以下子節點:
<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
<append>:如果是 true,日誌被追加到文件結尾,如果是 false,清空現存文件,默認是true。
<encoder>:對記錄事件進行格式化。(具體參數稍後講解 )
<prudent>:如果是 true,日誌會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false。
例如:
Xml代碼  
  1. <configuration>  
  2.   
  3.   <appender name="FILE" class="ch.qos.logback.core.FileAppender">  
  4.     <file>testFile.log</file>  
  5.     <append>true</append>  
  6.     <encoder>  
  7.       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>  
  8.     </encoder>  
  9.   </appender>  
  10.           
  11.   <root level="DEBUG">  
  12.     <appender-ref ref="FILE" />  
  13.   </root>  
  14. </configuration>  

3.RollingFileAppender:
滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件。有以下子節點:
<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
<append>:如果是 true,日誌被追加到文件結尾,如果是 false,清空現存文件,默認是true。
<encoder>:對記錄事件進行格式化。(具體參數稍後講解 )
<rollingPolicy>:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名。
<triggeringPolicy >: 告知 RollingFileAppender 合適激活滾動。
<prudent>:當爲true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個限制,1不支持也不允許文件壓縮,2不能設置file屬性,必須留空。
 
rollingPolicy:
 
TimeBasedRollingPolicy: 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動。有以下子節點:
<fileNamePattern>:
必要節點,包含文件名及“%d”轉換符, “%d”可以包含一個java.text.SimpleDateFormat指定的時間格式,如:%d{yyyy-MM}。如果直接使用 %d,默認格式是 yyyy-MM-dd。RollingFileAppender 的file字節點可有可無,通過設置file,可以爲活動文件和歸檔文件指定不同位置,當前日誌總是記錄到file指定的文件(活動文件),活動文件的名字不會改變;如果沒設置file,活動文件的名字會根據fileNamePattern 的值,每隔一段時間改變一次。“/”或者“\”會被當做目錄分隔符。
 
<maxHistory>:
可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每個月滾動,且<maxHistory>是6,則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些爲了歸檔而創建的目錄也會被刪除。
 
 
FixedWindowRollingPolicy: 根據固定窗口算法重命名文件的滾動策略。有以下子節點:
<minIndex>:窗口索引最小值
<maxIndex>:窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置爲12。
<fileNamePattern >:
必須包含“%i”例如,假設最小值和最大值分別爲1和2,命名模式爲 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有log%i.log.zip
 
triggeringPolicy:
 
SizeBasedTriggeringPolicy: 查看當前活動文件的大小,如果超過指定大小會告知RollingFileAppender 觸發當前活動文件滾動。只有一個節點:
<maxFileSize>:這是活動文件的大小,默認值是10MB。
 
 
 
例如:每天生成一個日誌文件,保存30天的日誌文件。
 
Java代碼  
  1. <configuration>   
  2.   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">   
  3.       
  4.     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">   
  5.       <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>   
  6.       <maxHistory>30</maxHistory>    
  7.     </rollingPolicy>   
  8.    
  9.     <encoder>   
  10.       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
  11.     </encoder>   
  12.   </appender>    
  13.    
  14.   <root level="DEBUG">   
  15.     <appender-ref ref="FILE" />   
  16.   </root>   
  17. </configuration>  
 
  例如:按照固定窗口模式生成日誌文件,當文件大於20MB時,生成新的日誌文件。窗口大小是1到3,當保存了3個歸檔文件後,將覆蓋最早的日誌。
Xml代碼  
  1. <configuration>   
  2.   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">   
  3.     <file>test.log</file>   
  4.    
  5.     <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">   
  6.       <fileNamePattern>tests.%i.log.zip</fileNamePattern>   
  7.       <minIndex>1</minIndex>   
  8.       <maxIndex>3</maxIndex>   
  9.     </rollingPolicy>   
  10.    
  11.     <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">   
  12.       <maxFileSize>5MB</maxFileSize>   
  13.     </triggeringPolicy>   
  14.     <encoder>   
  15.       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
  16.     </encoder>   
  17.   </appender>   
  18.            
  19.   <root level="DEBUG">   
  20.     <appender-ref ref="FILE" />   
  21.   </root>   
  22. </configuration>  
 
4.另外還有SocketAppender、SMTPAppender、DBAppender、SyslogAppender、SiftingAppender,並不常用,這些就不在這裏講解了,大家可以參考官方文檔。當然大家可以編寫自己的Appender。
 
 
<encoder>:
負責兩件事,一是把日誌信息轉換成字節數組,二是把字節數組寫入到輸出流。
目前PatternLayoutEncoder 是唯一有用的且默認的encoder ,有一個<pattern>節點,用來設置日誌的輸入格式。使用“%”加“轉換符”方式,如果要輸出“%”,則必須用“\”對“\%”進行轉義。
例如:
Xml代碼  
  1. <encoder>   
  2.    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
  3. </encoder  
 
<pattern>裏面的轉換符說明:
 




格式修飾符,與轉換符共同使用:
可選的格式修飾符位於“%”和轉換符之間。
第一個可選修飾符是左對齊 標誌,符號是減號“-”;接着是可選的最小寬度 修飾符,用十進制數表示。如果字符小於最小寬度,則左填充或右填充,默認是左填充(即右對齊),填充符爲空格。如果字符大於最小寬度,字符永遠不會被截斷。最大寬度 修飾符,符號是點號"."後面加十進制數。如果字符大於最大寬度,則從前面截斷。點符號“.”後面加減號“-”在加數字,表示從尾部截斷。
 
 
例如:%-4relative 表示,將輸出從程序啓動到創建日誌記錄的時間 進行左對齊 且最小寬度爲4。

logback 常用配置詳解(三) <filter>
 
<filter>:
過濾器,執行一個過濾器會有返回個枚舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將立即被拋棄不再經過其他過濾器;返回NEUTRAL,有序列表裏的下個過濾器過接着處理日誌;返回ACCEPT,日誌會被立即處理,不再經過剩餘過濾器。
過濾器被添加到<Appender> 中,爲<Appender> 添加一個或多個過濾器後,可以用任意條件對日誌進行過濾。<Appender> 有多個過濾器時,按照配置順序執行。
 
下面是幾個常用的過濾器:
 
LevelFilter: 級別過濾器,根據日誌級別進行過濾。如果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。有以下子節點:
<level>:設置過濾級別
<onMatch>:用於配置符合過濾條件的操作
<onMismatch>:用於配置不符合過濾條件的操作
 
例如:將過濾器的日誌級別配置爲INFO,所有INFO級別的日誌交給appender處理,非INFO級別的日誌,被過濾掉。
Xml代碼  
  1. <configuration>   
  2.   <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">   
  3.     <filter class="ch.qos.logback.classic.filter.LevelFilter">   
  4.       <level>INFO</level>   
  5.       <onMatch>ACCEPT</onMatch>   
  6.       <onMismatch>DENY</onMismatch>   
  7.     </filter>   
  8.     <encoder>   
  9.       <pattern>   
  10.         %-4relative [%thread] %-5level %logger{30} - %msg%n   
  11.       </pattern>   
  12.     </encoder>   
  13.   </appender>   
  14.   <root level="DEBUG">   
  15.     <appender-ref ref="CONSOLE" />   
  16.   </root>   
  17. </configuration>  
 
ThresholdFilter: 臨界值過濾器,過濾掉低於指定臨界值的日誌。當日志級別等於或高於臨界值時,過濾器返回NEUTRAL;當日志級別低於臨界值時,日誌會被拒絕。
例如:過濾掉所有低於INFO級別的日誌。
Xml代碼  
  1. <configuration>   
  2.   <appender name="CONSOLE"   
  3.     class="ch.qos.logback.core.ConsoleAppender">   
  4.     <!-- 過濾掉 TRACE 和 DEBUG 級別的日誌-->   
  5.     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">   
  6.       <level>INFO</level>   
  7.     </filter>   
  8.     <encoder>   
  9.       <pattern>   
  10.         %-4relative [%thread] %-5level %logger{30} - %msg%n   
  11.       </pattern>   
  12.     </encoder>   
  13.   </appender>   
  14.   <root level="DEBUG">   
  15.     <appender-ref ref="CONSOLE" />   
  16.   </root>   
  17. </configuration>  
 
EvaluatorFilter: 求值過濾器,評估、鑑別日誌是否符合指定條件。有一下子節點:
<evaluator>:
鑑別器,常用的鑑別器是JaninoEventEvaluato,也是默認的鑑別器,它以任意的java布爾值表達式作爲求值條件,求值條件在配置文件解釋過成功被動態編譯,布爾值表達式返回true就表示符合過濾條件。evaluator有個子標籤<expression>,用於配置求值條件。
 
求值表達式作用於當前日誌,logback向求值表達式暴露日誌的各種字段:
 

<onMatch>:用於配置符合過濾條件的操作
<onMismatch>:用於配置不符合過濾條件的操作
 
例如:過濾掉所有日誌消息中不包含“billing”字符串的日誌。
Xml代碼  
  1. <configuration>   
  2.    
  3.   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
  4.     <filter class="ch.qos.logback.core.filter.EvaluatorFilter">         
  5.       <evaluator> <!-- 默認爲 ch.qos.logback.classic.boolex.JaninoEventEvaluator -->   
  6.         <expression>return message.contains("billing");</expression>   
  7.       </evaluator>   
  8.       <OnMatch>ACCEPT </OnMatch>  
  9.       <OnMismatch>DENY</OnMismatch>  
  10.     </filter>   
  11.     <encoder>   
  12.       <pattern>   
  13.         %-4relative [%thread] %-5level %logger - %msg%n   
  14.       </pattern>   
  15.     </encoder>   
  16.   </appender>   
  17.    
  18.   <root level="INFO">   
  19.     <appender-ref ref="STDOUT" />   
  20.   </root>   
  21. </configuration>  
 
<matcher> :
匹配器,儘管可以使用String類的matches()方法進行模式匹配,但會導致每次調用過濾器時都會創建一個新的Pattern對象,爲了消除這種開銷,可以預定義一個或多個matcher對象,定以後就可以在求值表達式中重複引用。<matcher>是<evaluator>的子標籤。
<matcher>中包含兩個子標籤,一個是<name>,用於定義matcher的名字,求值表達式中使用這個名字來引用matcher;另一個是<regex>,用於配置匹配條件。
 
例如:
Xml代碼  
  1. <configuration debug="true">   
  2.    
  3.   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
  4.     <filter class="ch.qos.logback.core.filter.EvaluatorFilter">   
  5.       <evaluator>           
  6.         <matcher>   
  7.           <Name>odd</Name>   
  8.           <!-- filter out odd numbered statements -->   
  9.           <regex>statement [13579]</regex>   
  10.         </matcher>   
  11.            
  12.         <expression>odd.matches(formattedMessage)</expression>   
  13.       </evaluator>   
  14.       <OnMismatch>NEUTRAL</OnMismatch>   
  15.       <OnMatch>DENY</OnMatch>   
  16.     </filter>   
  17.     <encoder>   
  18.       <pattern>%-4relative [%thread] %-5level %logger - %msg%n</pattern>   
  19.     </encoder>   
  20.   </appender>   
  21.    
  22.   <root level="DEBUG">   
  23.     <appender-ref ref="STDOUT" />   
  24.   </root>   
  25. </configuration>  
 
其他Filter不太常用我這裏就不講了,大家可以參見官網。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章