logback.xml經常使用配置詳解

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}就能夠訪問其值

  • resource做用和file同樣,可是,它是能夠直接從classpath路徑下引入配置文件
<property resource="resource.properties" />

四、appender格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪一種輸出策略,經常使用就是控制檯輸出策略和文件輸出策略。appender有如下子節點:

  • filter,日誌輸出攔截器,能夠自定義攔截器也能夠用系統一些定義好的攔截器
/**
* 日誌輸出攔截器
* @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輸出日誌級別。

 

八、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

相關文章
相關標籤/搜索