LogBack配置

LogBack介紹

Logback是由log4j創始人設計的另外一個開源日誌組件。目前主要有如下三個組件java

  • logback-core:基礎模塊
  • logback-classic:它是log4j的一個改良版本,同時它完整實現了slf4j API使你能夠很方便地更換成其它日誌系統如log4j或JDK14 Logging
  • logback-access:訪問模塊與Servlet容器集成提供經過Http來訪問日誌的功能
    官方網站

配置介紹

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"></timestamp>
    <!-- 定義常量屬性 -->
    <property name="name" value="recommend_web"></property>
    <property name="CONSOLE_LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35} - %msg %n"></property>
    <!-- 配置上下文名稱 -->
    <contextName>${name}</contextName>
    <!-- 輸出到控制檯 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 格式化日誌內容 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern></pattern>
        </encoder>
    </appender>
    <!-- 把日誌添加到文件 -->
    <appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
        <!-- 被寫入的文件名,能夠是相對目錄,也能夠是絕對目錄,沒有默認值 -->
        <file>F:\logs\test.log</file>
        <!-- true-日誌追加到文件結尾,false-清空現存文件,默認爲true -->
        <append>true</append>
        <!-- 對日誌內容格式化 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
        <!-- true-日誌安全的寫入文件,效率低,默認爲false -->
        <prudent>false</prudent>
    </appender>
    <!-- 滾動記錄文件 -->
    <appender name="rollingAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>F:\rollLog\logFile.log</file>
        <!--
        TimeBasedRollingPolicy</font>:根據時間制定滾動策略
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔文件格式 -->
            <fileNamePattern>
                logFile.%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <!-- 歸檔文件最大數量 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!--
        SizeBasedTriggeringPolicy:根據文件制定滾動策略
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!-- 活動文件大小,若是超過當前大小,則觸發滾動,默認爲10MB -->
            <maxFileSize>5MB</maxFileSize>
        </rollingPolicy>
        <!--
        FixedWindowRollingPolicy:根據固定窗口算法制定滾動策略
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <!-- 活動文件大小,若是超過當前大小,則觸發滾動,默認爲10MB -->
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
            <!-- 歸檔文件格式,必須包含%i,表示當前文件索引 -->
            <fileNamePattern>
                logFile.%d{yyyy-MM-dd}.log
            </fileNamePattern>
        </rollingPolicy>
        <!-- 告知 RollingFileAppender 什麼時候激活滾動,跟FixedWindowRollingPolicy搭配使用 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
            <maxFileSize>5MB</maxFileSize> 
        </triggeringPolicy>
        <!-- 設置大小,跟TimeBasedRollingPolicy搭配使用,表示按日期、文件大小記錄日誌,文件名引用%i表示索引 -->
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>100MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 設置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
        <!-- 級別過濾器,根據日誌級別進行過濾 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 設置過濾級別 -->
            <level>ERROR</level>
            <!-- 用於配置符合過濾條件的操做 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用於配置不符合過濾條件的操做 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 臨界值過濾器,過濾掉低於指定臨界值的日誌 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 設置過濾級別 -->
            <level>ERROR</level>
        </filter>
    </appender>
    <!-- 定義日誌文件異步輸出 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日誌.默認的,若是隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值爲256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多隻能添加一個 -->
        <appender-ref ref="rollingAppender"/>
    </appender>
    <!-- 
        用來設置某一個包或具體某一個類的日誌打印級別,能夠有多個logger配置 
        level:指定級別,不寫則繼承上級的級別
        addtivity:是否向上級logger傳遞打印信息,默認爲true
    -->
    <logger name="com.log.controller.LogController" level="INFO" addtivity="false">
        <!-- 輸出源,能夠有多個,引用appender標籤的name -->
        <appender-ref ref="fileAppender"/>
    </logger>
    <!-- logger根元素,是全部logger元素的上級,只有一個level屬性,默認爲DEBUG -->
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>
複製代碼

Logback輸出日誌是從子節點開始,子節點若是有輸出源直接輸出,若是無,判斷配置的addtivity,是否像上級傳遞,便是否向root傳遞,傳遞則採用root的輸出源,不然不輸出日誌。
若是logger採用root的輸出源,則根root的level無關,好比:logger的level爲INFO,root的level爲ERROR,若是日誌打印爲info級別日誌,也同樣會打印出來,向上級傳遞只是使用root節點的輸出源。web

springboot下logback配置

官方推薦使用的xml名字的格式爲:logback-spring.xml而不是logback.xml,至於爲何,由於帶spring後綴的可使用<springProfile>這個標籤。經過springProfile標籤,可讓日誌在不一樣的環境下打印不一樣的日誌。好比能夠經過包裹logger和root標籤,示例以下:
<!-- name表示當前的環境,能夠配置多個,好比test-測試 prod-生產 -->
<springProfile name="dev">
    <logger name="com.log.controller.LogController" level="INFO" addtivity="false">
        <appender-ref ref="fileAppender"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
    </root>
<springProfile>
複製代碼
相關文章
相關標籤/搜索