<?xml version="1.0" encoding="utf-8"?>
1 <configuration debug="true" scan="true" scanPeriod="2"> 2 <!--TODO : 子節點信息--> 3 </configuration>
能夠這樣描述配置文件的基本結構:以<configuration>開頭,後面有零
個或多個<appender>元素,有零個或多個<logger>元素,有最多一個<root>元素html
<?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 <?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 <?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 <!-- 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 <?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>
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>
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
可用於紀錄多文件。