1. 程式人生 > >Logback常用配置詳解

Logback常用配置詳解

logback是一套日誌框架,由log4j的優化版,由同一個作者開發,在速度和效能上都超過其他日誌框架,再結合slf4j,已成為當前最流行的日誌框架。

Logback最常用就是在classpath定義一個lockback.xml配置檔案,從而對日誌進行配置輸出。

<?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>

上面就是一個常用的日誌配置模版,下面就從跟節點來解析每個節點

  1. 根節點configuration,有以下屬性

    a. scan,當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true。

    b. scanPeriod,設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。

    c. debug,當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。

  2. contextName ,設定日誌上下文名稱,可以通過%contextName來列印日誌上下文名稱

  3. property可以用來設定變數,可以通過${name}來訪問,有以下的屬性

    a. name,用於${name}訪問的key

    b. value,用於${name}訪問的value

    c. file ,用於指定配置檔案的路徑,他的作用在於,如果你有多個配置資訊的話,可以直接寫在配置檔案中,然後通過file引入

    <property file="src/main/java/chapters/configuration/variables.properties" />

    variables.properties如下

    log.path=F:\\demo
    log.name=mylog.log

    然後就直接通過${log.path}就可以訪問其值

    d.resource作用和file一樣,但是,它是可以直接從classpath路徑下引入配置檔案

    <property resource="resource.properties" />
  4. appender格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制檯輸出策略和檔案輸出策略。appender有以下子節點:

    a. 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>

    b. encoder和pattern節點組合用於具體輸出的日誌格式

    c. file節點用來指明日誌檔案的輸出位置,可以是絕對路徑也可以是相對路徑

    d. 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>
  5. root節點,必選節點,用來指定最基礎的日誌輸出級別,他有倆個自己點可以用來應用appender,格式化日誌輸出

    <root level="debug">
    <appender-ref ref="console" />
    <appender-ref ref="file" />
    </root>
  6. logger節點,可選節點,用來具體指明包的日誌輸出級別,它將會覆蓋root的輸出級別

    <logger name="com.example.logback" level="warn" />