logback日誌配置詳解 logback mdc配置 一、logback日誌配置 二、logback mdc機制

一、logback日誌配置

相關引用鏈接
https://blog.csdn.net/qq_42292373/article/details/101016812
https://www.cnblogs.com/zhlv/p/11196080.html

1.logback的簡單介紹

logback是java的日誌開源組件,是log4j創始人寫的,性能比log4j要好,目前主要分爲3個模塊
logback-core:核心代碼模塊
logback-classic:log4j的一個改良版本,同時實現了slf4j的接口,這樣你如果之後要切換其他日誌組件也是一件很容易的事
logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日誌的功能

2.關於SLF4j的日誌輸出級別

在slf4j中,從小到大的日誌級別依舊是trace、debug、info、warn、error。

TRACE:很低的日誌級別,一般不會使用。
DEBUG:指出細粒度信息事件對調試應用程序是非常有幫助的,主要用於開發過程中打印一些運行信息。
INFO:消息在粗粒度級別上突出強調應用程序的運行過程。打印一些你感興趣的或者重要的信息,這個可以用於生產環境中輸出程序運行的一些重要信息,但是不能濫用,避免打印過多的日誌。
WARN:表明會出現潛在錯誤的情形,有些信息不是錯誤信息,但是也要給程序員的一些提示。
ERROR:指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。打印錯誤和異常信息,如果不想輸出太多的日誌,可以使用這個級別。

3.logback配置詳解
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan: 當此屬性設置爲true時,配置文件如果發生改變,將會被重新加載,默認值爲true。
scanPeriod: 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。
debug: 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。
-->
<configuration debug="true" scan="true" scanPeriod="1 seconds">
     <!--自定義log文件特殊字段標識-->
    <contextName>logback</contextName>
    <!--定義參數,後面可以通過${app.name}使用-->
    <property name="app.name" value="logback_test"/>
    <!--ConsoleAppender 用於在屏幕上輸出日誌-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定義了一個過濾器,在LEVEL之下的日誌輸出不會被打印出來-->
        <!--這裏定義了INFO,也就是控制檯不會輸出比INFO級別小的日誌-->
        <!--還有一個ThresholdFilter,[瀏覽器訪問鏈接](https://upload-images.jianshu.io/upload_images/2368134-a975c5c0ca0b13f5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--onMatch="ACCEPT" 表示匹配該級別及以上-->
            <!--onMatch="DENY" 表示不匹配該級別及以上-->
            <!--onMatch="NEUTRAL" 表示該級別及以上的,由下一個filter處理,如果當前是最後一個,則表示匹配該級別及以上-->
            <!--onMismatch="ACCEPT" 表示匹配該級別以下-->
            <!--onMismatch="NEUTRAL" 表示該級別及以下的,由下一個filter處理,如果當前是最後一個,則不匹配該級別以下的-->
            <!--onMismatch="DENY" 表示不匹配該級別以下的-->

            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- encoder 默認配置爲PatternLayoutEncoder -->
        <!--定義控制檯輸出格式-->
        <encoder>
            <!--
            1.%d{yyyy-MM-dd HH:mm:ss.SSS}:輸出固定的時間格式 
            2.%thread:輸出線程名稱
            3.%-5level :轉換說明符%-5level意味着日誌事件的級別應該保持爲5個字符的寬度對齊 如:
            DEBUG [main]: Message 1 
            WARN  [main]: Message 2
            4.%logger{36}:在日誌記錄事件的原點輸出日誌記錄器的名稱(縮寫算法將縮短記錄器的名稱)如:
            請打開瀏覽器訪問---》》》(https://upload-images.jianshu.io/upload_images/2368134-4f9180c514fbd675.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
            5.%msg:輸出的信息
            6.%n:換行
              -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}  %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--定義日誌輸出的路徑-->
        <!--這裏的scheduler.manager.server.home 沒有在上面的配置中設定,所以會使用java啓動時配置的值-->
        <!--比如通過 java -Dscheduler.manager.server.home=/path/to XXXX 配置該屬性-->
        <file>${scheduler.manager.server.home}/logs/${app.name}.log</file>
        <!--定義日誌滾動的策略-->
        <!--三種日誌滾動策略:TimeBasedRollingPolicy,SizeAndTimeBasedRollingPolicy,FixedWindowRollingPolicy-->
        <!--1.TimeBasedRoolingPolicy 基於時間滾動策略:時間滾動策略可以基於時間滾動按時間生成日誌-->
        <!--2.SizeAndTimeBasedRollingPolicy 基於大小和時間的滾動策略:這個策略出現的原因就是對時間滾動策略的一個補充,使其不僅按時間進行生成而且考慮到文件大小的原因,因爲在基於時間的滾動策略生成的日誌文件,只是對一段時間總的日誌大小做了限定,但是沒有對每個日誌文件的大小做限定,這就會造成個別日誌文件過大,後期傳遞,閱讀困難的問題-->
        <!--3.FixedWindowRollingPolicy基於固定窗口的滾動策略:防止滾動測策略導致過多的日誌文件出現。這個策略出現得配合triggeringPolicy,給一個什麼時候日誌滾動一次的控制-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--定義文件滾動時的文件名的格式-->
            <fileNamePattern>${scheduler.manager.server.home}/logs/${app.name}.%d{yyyy-MM-dd.HH}.log.gz
            </fileNamePattern>
            <!--60天的時間週期,日誌量最大20GB-->
            <maxHistory>60</maxHistory>
            <!-- 該屬性在 1.1.6版本後 纔開始支持  超過限制將異步刪除數據-->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!--每個日誌文件最大100MB-->
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <!--定義輸出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

   

    <!--對於類路徑以 com.example.logback 開頭的Logger,輸出級別設置爲warn,並且只輸出到控制檯-->
    <!--這個logger沒有指定appender,它會繼承root節點中定義的那些appender-->
    <logger name="com.example.logback" level="warn"/>

    <!--通過 LoggerFactory.getLogger("mytest") 可以獲取到這個logger-->
    <!--由於這個logger自動繼承了root的appender,root中已經有stdout的appender了,自己這邊又引入了stdout的appender-->
    <!--如果沒有設置 additivity="false" ,就會導致一條日誌在控制檯輸出兩次的情況-->
    <!--additivity表示要不要使用rootLogger配置的appender進行輸出-->
    <logger name="mytest" level="info" additivity="false">
        <appender-ref ref="stdout"/>
    </logger>
    
    <!--由於設置了 additivity="false" ,所以輸出時不會使用rootLogger的appender-->
    <!--但是這個logger本身又沒有配置appender,所以使用這個logger輸出日誌的話就不會輸出到任何地方-->
    <logger name="mytest2" level="info" additivity="false"/>

 <!--root是默認的logger 這裏設定輸出級別是debug-->
    <root level="info">
        <!--定義了兩個appender,日誌會通過往這兩個appender裏面寫-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>

</configuration>

二、logback mdc機制

相關引用鏈接
https://www.jianshu.com/p/0436d3a4c673

1. MDC 介紹:

MDC(Mapped Diagnostic Context,映射調試上下文),即將一些運行時的上下文數據通過logback打印出來,是 一種方便在多線程條件下記錄日誌的功能。和SiftingAppender一起,可以實現根據運行時的上下文數據,將日誌保存到不同的文件中。
2.作用:增加日誌的打印方法
(1)簡單的打印數據demo




(2)用於filter獲取數據demo



(3)web文件配置獲取前端請求的數據內容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章