Logback最經常使用就是在/src/main/resource/文件夾下的logback.xml文件中。,從而對日誌進行配置輸出。
logback主要包含三個組成部分:Loggers(日誌記錄器)、Appenders(輸出目的在)、Layouts(日誌輸出格式)java
下面就是一個經常使用的日誌配置模版,下面就從跟節點來解析每一個節點spring
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="1 seconds"> <contextName>logback</contextName> <property name="log.path" value="F:\\logback.log" /> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- <filter class="com.example.logback.filter.MyFilter" /> --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern> </rollingPolicy> <encoder> <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n </pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root> <logger name="com.example.logback" level="warn" /> </configuration>
一、根節點configuration,有如下屬性app
scan,當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。ide
scanPeriod,設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。spa
debug,當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。.net
二、contextName ,設置日誌上下文名稱,能夠經過%contextName來打印日誌上下文名稱線程
三、property能夠用來設置變量,能夠經過${name}來訪問,有如下的屬性debug
name,用於${name}訪問的key日誌
value,用於${name}訪問的valuecode
file ,用於指定配置文件的路徑,他的做用在於,若是你有多個配置信息的話,能夠直接寫在配置文件中,而後經過file引入
<property file="src/main/java/chapters/configuration/variables.properties" />
variables.properties以下
log.path=F:\\demo log.name=mylog.log
而後就直接經過${log.path}就能夠訪問其值
<property resource="resource.properties" />
四、appender格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪一種輸出策略,經常使用就是控制檯輸出策略和文件輸出策略。appender有如下子節點:
/** * 日誌輸出攔截器 * @author liuxg * @date 2016年4月28日 下午3:36:23 */ public class MyFilter extends Filter<ILoggingEvent> { @Override public FilterReply decide(ILoggingEvent event) { if (event.getMessage().contains("sample")) { return FilterReply.ACCEPT; //容許輸入串 } else { return FilterReply.DENY; //不容許輸出 } } }
它能夠提供最大的自定義輸出,若是須要用到系統定義的攔截器,例如咱們用ThresholdFilter來過濾掉ERROR級別如下的日誌不輸出到文件中
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter>
encoder和pattern節點組合用於具體輸出的日誌格式
file節點用來指明日誌文件的輸出位置,能夠是絕對路徑也能夠是相對路徑
rollingPolicy日誌回滾策略,在這裏咱們用了TimeBasedRollingPolicy,基於時間的回滾策略,有如下子節點
fileNamePattern,必要節點,能夠用來設置指定時間的日誌歸檔,例如咱們上面的例子是天天將日誌歸檔成一個zip包
maxHistory ,可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件,,例如設置爲30的話,則30天以後,舊的日誌就會被刪除
totalSizeCap,可選節點,用來指定日誌文件的上限大小,例如設置爲3GB的話,那麼到了這個值,就會刪除舊的日誌
除了用TimeBasedRollingPolicy策略,咱們還能夠用SizeAndTimeBasedRollingPolicy,配置子節點的maxFileSize來指定單個日誌文件的大小
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>mylog.txt</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 天天一歸檔 --> <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <!-- 單個日誌文件最多 100MB, 60天的日誌週期,最大不能超過20GB --> <maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender>
五、root節點,必選節點,用來指定最基礎的日誌輸出級別,他有倆個本身點能夠用來應用appender,格式化日誌輸出
<root level="debug"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root>
六、logger節點,可選節點,用來具體指明包的日誌輸出級別,它將會覆蓋root的輸出級別
<!-- name 屬性表示匹配的logger類型前綴 --> <logger name="com.taobao.jingwei.monitor"> <level value="WARN" /> <!-- 引用的appender,相似於spring的ref --> <appender-ref ref="MONITOR" /> </logger>
logger中有一個additivity屬性,做用在於 children-logger是否使用 rootLogger配置的appender進行輸出。
false:表示只用當前logger的appender-ref。
true:表示當前logger的appender-ref和rootLogger的appender-ref都有效。
這樣logger名字匹配com.taobao.jingwei.monitor的信息就只在MONITOR的appender輸出,而不會在root logger中輸出了
七、特殊符號
%logger{36} 表示logger名字最長36個字符,不然按照句點分割。
logger{length}輸出日誌的logger名,可有一個整形參數,功能是縮短logger名,設置爲0表示只輸入logger最右邊。
Conversion specifier | Logger name | Result |
---|---|---|
%logger | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
%logger{0} | mainPackage.sub.sample.Bar | Bar |
%logger{5} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{10} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{15} | mainPackage.sub.sample.Bar | m.s.sample.Bar |
%logger{16} | mainPackage.sub.sample.Bar | m.sub.sample.Bar |
%logger{26} | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
%d{HH:mm:ss.SSS}輸出日誌的打印日誌,模式語法與java.text.SimpleDateFormat 兼容。看上去%d就已經夠好了
Conversion Pattern | Result |
---|---|
%d | 2006-10-20 14:06:49,812 |
%date | 2006-10-20 14:06:49,812 |
%date{ISO8601} | 2006-10-20 14:06:49,812 |
%msg%n 其中msg表示打印輸出的消息, %n表示換行
m / msg / message 輸出應用程序提供的信息。
可選的格式修飾符位於「%」和轉換符之間。第一個可選修飾符是左對齊標誌,符號是減號「-」;
接着是可選的最小寬度修飾符,用十進制數表示。若是字符小於最小寬度,則左填充或右填充,默認是左填充(即右對齊),填充符爲空格。
若是字符大於最小寬度,字符永遠不會被截斷。
t / thread 輸出產生日誌的線程名。
p / le / level輸出日誌級別。
Logger能夠被分配級別。級別包括:TRACE、DEBUG、INFO、WARN和ERROR,定義於ch.qos.logback.classic.Level類。程序會打印高於或等於所設置級別的日誌,設置的日誌等級越高,打印出來的日誌就越少。若是設置級別爲INFO,則優先級高於等於INFO級別(如:INFO、 WARN、ERROR)的日誌信息將能夠被輸出,小於該級別的如DEBUG將不會被輸出。爲確保全部logger都可以最終繼承一個級別,根logger老是有級別,默認狀況下,這個級別是DEBUG。
http://blog.csdn.net/arkblue/article/details/7772971
http://blog.csdn.net/yingxiake/article/details/51274426