1. 程式人生 > 其它 >logback日誌配置

logback日誌配置

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 在此未說明屬性為非必須的,那就表示屬性必須設定 -->
<!-- *****************最小配置檔案結構介紹******************************* -->
<!-- 
    <configuration>    
        <appender></appender>    //存在1或多個,功能指定記錄輸出目的地
        <root></root>            //最多存在一個,根logger
        <logger><logger>        //存在1或多個,普通logger
    </configuration>
 -->
<!-- *************************各個標籤詳細介紹********************************** -->

<!-- debug(非必須)屬性:true表示輸出logback內部的日誌資訊(不影響配置和級別) ;
     scan(非必須)屬性:預設為false,true表示掃描配置檔案的變化並自動重新配置,預設每隔1分鐘掃描一次;
     scanPeriod(非必須)屬性:搭配scan屬性使用,設定掃描的間隔時間
-->
<configuration debug="true" scan="true" scanPeriod="1 seconds">
    <!-- 用於指定logger上下文名稱,預設為default -->
    <contextName>logback</contextName>
    
    <!-- 設定變數FILE_PATH,用於指定名為FILE的appender的目的檔案存放的目錄 -->
    <property name="FILE_PATH" value="D:/"></property>
    <!-- 
        **********************配置TurboFilter型別的過濾器**********************************
        TurboFilter型別過濾器有三種:這裡使用的是DuplicateMessageFilter
            子標籤<cacheSize>:表示內部快取對舊訊息引用的個數上限
            子標籤<allowedRepetitions>:表示允許訊息出現的重複次數上限,超過次數上限的記錄請求將被丟棄
    -->
    <!-- 使用自定義的TurboFilter -->
    <turboFilter class="logback.SampleTurboFilter">
    </turboFilter>
    <!-- 使用DuplicateTurboFilter -->
    <turboFilter class="ch.qos.logback.classic.turbo.DuplicateMessageFilter">
        <allowedRepetitions>1</allowedRepetitions>
        <cacheSize>20</cacheSize>
    </turboFilter>
    
    <!-- ************************常用的Appender************************************** -->
    <!-- 
        <appender>標籤包含2個屬性:name、class
        name屬性:指定appender名稱;class屬性:指定目的地型別 (比如ConsoleAppender、FileAppender等)
        class屬性的值決定了<appender>標籤包含的子標籤的種類。
        -->
    <!-- 該appender的功能是將記錄資訊以特定格式寫到控制檯 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--encoder:將事件轉換為字串
            預設配置為PatternLayoutEncoder類 
            encoder用於替代Layout,encoder擴充套件了Layout功能
            Layout功能:只負責把事件轉換為字串,但是不能指定何時將記錄寫入到指定目的地
            encoder功能:即負責把事件轉換為字串,也可以指定何時將記錄寫入到指定目的地
         -->
        <encoder>
            <!-- 指定輸出格式
                %d{} :表示時間
                %thread:請求記錄所在的執行緒名
                %-5level:用5位顯示請求級別
                %logger{36}:輸出logger名,{36}表示logger名最大佔用的字元位數,{0}表示最簡短logger名(不包含包名)。
             -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
        </encoder>
    </appender>
    <!-- 該appender的功能是將記錄資訊以特定格式寫到檔案 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <!-- $使用變數FILE_PATH的格式,類似Linux中使用的格式:${FILE_PATH} -->
        <file>${FILE_PATH}/file.log</file>
        <encoder>
            <!-- 指定輸出格式 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
        </encoder>
    </appender>
    <!-- 
        ***********************以最小窗體為指定的滾動規則的appender*****************************
        RollingFileAppender型別的appender中必須包含4個子標籤:<file>、<rollingPolicy>、<triggerPolicy>、<encoder>
        <rollingPolicy>標籤用於指定滾動規則,該標籤有一個屬性class:用於指定實現具體的滾動規則的類。
        <triggerPolicy>標籤用於指定發生滾動的條件,該標籤有一個屬性class:用於指定具體滾動條件的類。
        <rollingPolicy>和<triggerPolicy>中具體包含哪些子標籤是由class屬性指定的類來決定的,因為不同的類有不同的引數,從而需要不同的標籤來傳參
     -->
     <!-- 該appender的功能是將記錄資訊以特定格式寫到檔案,當檔案達到20MB時,建立以特定規則新的 檔案,之後的記錄會寫到新檔案-->
    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 在第一次觸發滾動之前記錄將會寫到該檔案中 -->
        <file>${FILE_PATH}/rolling.log</file>
        <!-- 
            前提條件:class的值為FixedWindowRollingPolicy,表示以最小窗體為指定的滾動規則
            RollingPolicy標籤必須子標籤:<fileNamePattern>、<minIndex>、<maxIndex>
            <fileNamePattern>:表示滾動條件達到後,建立檔名的規則,其中"%i"代表數字1~5。第一次觸發條件,建立檔案rolling1.log,並且記錄開始寫到這個檔案中
             <minIndex>與<maxIndex>共同決定了檔案的個數
         -->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${FILE_PATH}/rolling%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>5</maxIndex>
        </rollingPolicy>
        <!-- 
            <triggeringPolicy>功能:用於限制檔案大小
            前提條件:class的值為SizeBasedTriggeringPolicy,表示以檔案大小為觸發條件
            只有一個子標籤<maxFileSize>用於指定觸發條件
         -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>20MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
        </encoder>
    </appender>
    <!-- 
    *****************************根據時間滾動 為滾動規則和條件的appender(最常用)***********************
    -->
    <!-- 該appender的功能:將記錄資訊以特定格式寫到檔案,當檔案達到20MB時,建立以時間為特定規則新的 檔案,之後的記錄會寫到新檔案,
    檔案個數最多維持10個,檔案達到10個 後刪除舊的檔案-->
    <appender name="time_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- TimeBasedRollingPolicy實現了RollingPolicy與TriggeringPolicy,
            因此只需要<rollingPolicy>標籤,不需要<TriggeringPolicy>標籤
            <rollingPolicy>標籤有兩個子標籤:<fileNamePattern>、<maxHistory>
            <fileNamePattern>:用於指定檔名命名規則
            <maxHistory>:保留檔案的個數,超過了就刪除建立時間最久的檔案
         -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 檔名 -->
            <fileNamePattern>${FILE_PATH}/java_log/test%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
        </encoder>
    </appender>
    <!-- 
        ***********************常規級別過濾器的使用****************************************
        本配置功能:過濾並接受請求級別為debug的請求,對於其他級別請求一律丟棄。
     -->
    <appender name="level_console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
        </encoder>
    </appender>
    <!-- 
        ***********************常規臨界值濾器的使用****************************************
        本配置功能:請求級別高於或等於info的請求響應NEUTRAL(進入下一個環節),低於info的級別請求響應DENY(表示丟棄)。
     -->
    <appender name="threshold_console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
        </encoder>
    </appender>
    <!-- appender的目的地為mysql資料庫 -->
    <appender name="jdbc" class="ch.qos.logback.classic.db.DBAppender">
        <!-- 這裡只使用jdbc中的DriverManager獲得連線,不使用任何資料來源 -->
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
                <driverClass>com.mysql.jdbc.Driver</driverClass>
                <url>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC</url>
                <user>root</user>
                <password>Zp970321</password>
        </connectionSource>
    </appender>
    <!-- ******以下DBAppender型別的appender的目的地為mysql資料庫******** -->
    <appender name="c3p0_datasource" class="ch.qos.logback.classic.db.DBAppender">
        <!-- 這裡使用DataSource獲得連線-->
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <!-- 實現DataSource的資料庫連線池有很多,比如DBCP、c3p0、Druid等
                這裡使用的是c3p0
             -->
            <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <user>root</user>
                <password>Zp970321</password>
                <driverClass>com.mysql.jdbc.Driver</driverClass>
                <jdbcUrl>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8</jdbcUrl>
            </dataSource>
        </connectionSource>
    </appender>
    <appender name="Druid_datasource" class="ch.qos.logback.classic.db.DBAppender">
        <!-- 這裡使用DataSource獲得連線-->
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <!-- 實現DataSource的資料庫連線池有很多,比如DBCP、c3p0、Druid等
                這裡使用的是Druid
             -->
            <dataSource class="com.alibaba.druid.pool.DruidDataSource">
                <username>root</username>
                <password>Zp970321</password>
                <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                <url>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8</url>
            </dataSource>
        </connectionSource>
    </appender>
    <appender name="dbcp_datasource" class="ch.qos.logback.classic.db.DBAppender">
        <!-- 這裡使用DataSource獲得連線-->
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <!-- 實現DataSource的資料庫連線池有很多,比如DBCP、c3p0、Druid等
                這裡使用的是dbcp
             -->
            <dataSource class="org.apache.commons.dbcp.BasicDataSource">
                <username>root</username>
                <password>Zp970321</password>
                <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                <url>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8</url>
            </dataSource>
        </connectionSource>
    </appender>
    <!-- level屬性:指定根logger的分配級別 -->
    <root level="debug">
        <!-- ref屬性:指定根logger關聯的appender -->
        <appender-ref ref="STDOUT"></appender-ref>
    </root>
    <!-- name:指定logger名稱;level:指定logger的分配級別;additivity(非必須,預設為true):設定appender疊加性 -->
    <logger name="demo" level="debug" additivity="false">
        <appender-ref ref="FILE"></appender-ref>
    </logger>
    <logger name="demo2" level="debug">
        <appender-ref ref="rollingFile"></appender-ref>
    </logger>
    <logger name="demo3" level="debug">
        <appender-ref ref="time_file"></appender-ref>
    </logger>
    <logger name="demo4" level="debug" additivity="false">
        <appender-ref ref="level_console"></appender-ref>
    </logger>
    <logger name="demo5" level="debug" additivity="false">
        <appender-ref ref="threshold_console"></appender-ref>
    </logger>
    <logger name="demo6" level="debug"  additivity="false">
        <appender-ref ref="jdbc"></appender-ref>
    </logger>
    <logger name="demo7" level="debug"  additivity="false">
        <appender-ref ref="c3p0_datasource"></appender-ref>
    </logger>
    <logger name="demo8" level="debug"  additivity="false">
        <appender-ref ref="Druid_datasource"></appender-ref>
    </logger>
    <logger name="demo9" level="debug"  additivity="false">
        <appender-ref ref="dbcp_datasource"></appender-ref>
    </logger>
</configuration>