1.須要添加的包 java
logback-classic-1.1.3.jar
logback-core-1.1.3.jar
slf4j-api-1.7.12.jar web
2.關於配置文件讀取 正則表達式
系統啓動,默認加載在classpath下的logback.xml 或者 logback-test.xml和 logback.groovy 文件, api
通常咱們只要在classpath下添加logback.xml文件 數組
3.關於日誌建立 安全
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { private static final Logger LOGGER = LoggerFactory.getLogger(Test.class); public void logOutPut(){ MDC.put("ip", "192.168.1.1"); LOGGER.debug("hello word"); MDC.remove("ip"); } public static void main(String[] args) { Test t = new Test(); t.logOutPut(); } }
文檔結構: app
<configuration> <contextName></contextName> <property/> <timestamp></timestamp> <appender>...</appender> <logger> ...</logger> <root>...</root> </configuration>
<configuration scan="true" scanPeriod="60 seconds" debug="false">...</configuration >scan : 當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。
scanPeriod : 設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位(milliseconds、seconds、minutes和hours),默認單位是毫秒(milliseconds)。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。
性能
debug : 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。 lua
end: configuration spa
4.2 設置上下文名稱
start:contextName
<contextName>mylogConfig</contextName>每一個logger都關聯到logger上下文,默認上下文名稱爲「default」。但可使用<contextName>設置成其餘名字,用於區分不一樣應用程序的記錄。一旦設置,不能修改。
end:contextName
4.3 設置變量
start:property
<configuration> <property name="LogConfig" value="mylogConfig" /> <contextName>${LogConfig}</contextName> </configuration>
用來定義變量值的標籤,經過<property>定義的值會被插入到logger上下文中。定義變量後,可使「${}」來使用變量。
name : 變量的名稱
value : 變量定義的值
end:property
4.4 獲取時間戳字符串
start:timestamp
<timestamp key="date" datePattern="yyyy-MM-dd"/>key : 標識名字
datePattern : 設置將當前時間(解析配置文件的時間)轉換爲字符串的模式,遵循java.txt.SimpleDateFormat的格式。
end:timestamp
4.5 全部日誌器的總的設置 root
start:root
<root level="error"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE-AUDIT" /> </root>
<root>也是<loger>元素,可是它是根loger
level : 設置全部日誌的輸出級別
<appender-ref>:設置全部日誌的apender
end:root
4.6 個別日誌器的個性化設置 logger
start:logger
<logger name="com.mkyong.web" level="debug" additivity="false"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE-AUDIT" /> </logger>用來設置某一個包或者具體的某一個類下的日誌的打印級別、以及爲其指定<appender>。
name : 能夠是某一級的包名,也能夠是一個完整的類名。必要
level : 打印級別,若是不指定默認爲root中的打印級別
additivity : 是否向上級loger傳遞打印信息。默認是true
<appender-ref> : 日誌輸出設置,能夠爲logger其指定多個appender。若是不指定默認爲root的appender
end:logger
4.7 設置日誌輸出方式appender
star:appender
總的結構(只是列出些經常使用的)
<appender> <target></target> <encoder></encoder> <filter></filter> <file>文件輸出-指定的文件路徑</file> <append>文件輸出-是否向舊的日誌追加新內容</append> <rollingPolicy>文件輸出-文件滾動策略</rollingPolicy> <prudent>文件輸出—</prudent> <triggeringPolicy>文件輸出-激活滾動</triggeringPolicy> </appender>
例1(控制檯輸出,根據須要分別打印不一樣級別的日誌消息):
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n </Pattern> <charset>utf-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> </appender> <appender name="STDOUT_ERROR" class="ch.qos.logback.core.ConsoleAppender"> <target>System.err</target> <encoder> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
例2(追加的方式輸出到文件,只有一個日誌文件,全部的日誌消息將一直追加到指定的文件後面):
<appender name="FILE-AUDIT_APPEND" class="ch.qos.logback.core.FileAppender"> <file>F:/log/test/logback.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <append>true</append> </appender>
例3 (滾動方式輸出到文件。下面的設置將一天產生一個日誌,若是當天日誌超過10M將進行再分割)
<appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>F:/log/test/today.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> <charset>utf-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>F:/log/test/%d.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender>
1. <appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">...</appender>name : appender的標識名稱
class : 指定日誌輸出方案的具體實現類。(如下是官方提供的幾種方案)
2.<target>:當爲控制檯輸出時可爲其指定 System.out 或者 System.err,默認 System.out
3.<filter>:設置輸出時過濾策略
4.<file>:當爲文件輸出時,爲其指定文件路徑。能夠是絕對,也能夠是相對,若是上級目錄不存在會自動建立,沒有默認值。
5.<append>:當爲文件輸出時,是否向舊的日誌追加新內容,默認true,當是滾動輸出日誌文件時該屬性將會被託 管(設置了也不生效),且值爲true
6.<rollingPolicy>:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名。
7. <prudent> :若是是 true,日誌會被安全的寫入文件,即便其餘的FileAppender也在向此文件作寫入操做,效率低,默認是 false
8.<triggeringPolicy> : 告知 RollingFileAppender 合適激活滾動。
9.<encoder>:
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> <charset>utf-8</charset> </encoder>
負責兩件事,一是把日誌信息轉換成字節數組,二是把字節數組寫入到輸出流目前PatternLayoutEncoder 是惟一有用的且默認的encoder ,使用「%」加「轉換符」方式,若是要輸出「%」,則必須用「\」對「\%」進行轉義。(爲了兼容舊的版本在此版本下仍是支持使用<layout>節點設置輸出格式,但爲了升級的考慮不推薦使用)
轉換符:
1. 輸出日誌的logger名
%c {length }
%lo {length }
%logger {length }
2.輸出上下文名稱。
%contextName
%cn
3.輸出當前日期,模式語法與java.text.SimpleDateFormat 兼容
%d {pattern }
%date {pattern }
4.輸出應用程序提供的信息
%m
%msg
%message
5.輸出平臺先關的分行符「\n」或者「\r\n」。
%n
6.輸出日誌級別。
%p
%le
%level
7.輸出產生日誌的線程名。
%t
%thread
8.輸出從程序啓動到建立日誌記錄的時間,單位是毫秒
%r
%relative
9.p 爲日誌內容,r 是正則表達式,將p 中符合r 的內容替換爲t 。
%replace(p ){r, t} 例: %replace(%msg){'\s', '' }
10.輸出MDC值
%X{keyName} 例: %X{ip} ---> 192.168.1.1 (java代碼見3)
11.以及其餘可能會影響性能的轉換符
%L 或 %line 輸出執行日誌請求的行號。儘可能避免使用
%M 或 %method 輸出執行日誌請求的方法名。儘可能避免使用
%F 或 %file 輸出執行記錄請求的java源文件名。儘可能避免使用
%C {length } 或 %class {length } 輸出執行記錄請求的調用者的全限定名。儘可能避免使用
%caller{depth}caller{depth, evaluator-1, ... evaluator-n} 輸出生成日誌的調用者的位置信息,整數選項表示輸出信息深度。
12.格式修飾符,與轉換符共同使用:
可選的格式修飾符位於「%」和轉換符之間。
第一個可選修飾符是左對齊 標誌,符號是減號「-」;接着是可選的最小寬度 修飾符,用十進制數表示。若是字符小於最小寬度,則左填充或右填充,默認是左填充(即右對齊),填充符爲空格。若是字符大於最小寬度,字符永遠不會被截斷。最大寬度 修飾符,符號是點號"."後面加十進制數。若是字符大於最大寬度,則從前面截斷。點符號「.」後面加減號「-」在加數字,表示從尾部截斷。
end:appender
一些經常使用的配置:見《logback經常使用配置》
ps: 以前我一直再找logback.xml的dtd,或schema,可是沒找到,緣由是這裏的節點名稱是其使用類的屬性。例:若是你要想看 <encoder class='PatternLayoutEncoder'> 這個節點下的配置方案,那你能夠去查看PatternLayoutEncoder這類的api,看其有什麼屬性能夠設置的,其屬性名便是節點名。