logback的xml配置文件模板(超詳細)

<?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&amp;characterEncoding=utf8&amp;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&amp;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&amp;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&amp;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>

 上述的全部appender與filter都試驗過,因此能夠保證正確性,若是有不懂的能夠跳轉到個人博客https://www.cnblogs.com/z-x-p/java

裏面有很詳細的講解。mysql

相關文章
相關標籤/搜索