Springboot Logback筆記

??之前習(xí)慣了日志配置文件粘貼復(fù)制。今天閑下來的時候,學(xué)習(xí)了Logback的配置新姿勢,以后不再盲目粘貼復(fù)制了。由于Springboot中默認(rèn)的日志配置是Logback,因此本文中也只涉及Logback的配置。

1. 配置整體結(jié)構(gòu)

<configuration scan="true" scanPeriod="60 seconds" debug="false">  
    <contextName>${maskwang-log}</contextName> 
    <appender>
        //xxxx
    </appender>   
    <logger>
        //xxxx
    </logger>
    <root>             
       //xxxx
    </root>  
</configuration>  

每個日志配置文件的配置都是上面這種形式,基本的結(jié)果如下圖。其中scan表示是否定期掃描更新配置文件,scanPeriod表示掃描的周期,debug設(shè)置為true時,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài),默認(rèn)值為false。

  • appender 表示日志輸出的位置,通常有輸出到控制臺的ConsoleAppender,輸出到文體的FileAppenderRollingFileAppender
  • logger表示需要進(jìn)行自定義日志的位置,即在哪里打需要的日志。通常像下面這樣自定義某個類需要的日志
<logger name="com.maskwang.controller" level="info"
            additivity="false">
        <appender-ref ref="infoAppender" />
</logger>
  • root 表示根logger,也是一種logger,且只有一個level屬性。沒有特別指定logger,那么都是采用root 的日志配置。
    日志.jpg

2. appender詳解

 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

這種是指定控制臺打印的appender,其中CONSOLE_LOG_PATTERN是自定義的日志打印格式,如[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n所示。

<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路徑 ,注意LOG_PATH是默認(rèn)值,
            它的配置對應(yīng)application.properties里的logging.path值-->
        <file>${LOG_PATH}/info/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名稱 -->
            <fileNamePattern>info/info-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 文件最大保存歷史數(shù)量 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
</appender>

這種是滾動文件文件的appender,也就是每隔一天生成一個日志文件。

  • file表示存放日志文件的目錄。
  • rollingPolicy表示文件滾動的策略,fileNamePattern表示每個滾動文件的命名如info-2019-11-19.log,MaxHistory保存的最大文件個數(shù),該例子中表示最多只保存30天的日志,舊的日志將會刪除。
  • pattern表示日志文每條日志的格式如[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n。
  • filter表示過濾不想要級別的日志。LevelFilter類表示過濾特定的級別,該例子中表示該appender只保存INFO級別的日志,其他的日志則忽略。其實還有另外一種類ThresholdFilter,表示只保存該級別或者該級別更高級別的日志。level表示日志級別,onMatch表示如果匹配就記錄,并且不傳遞到下一個過濾器。onMismatch表示不匹配記錄且不傳遞到下一個過濾器。如果需要自定義過濾規(guī)則,則需要繼承Filter,實現(xiàn)decide方法,具體如didi的這篇文章Logback中如何自定義靈活的日志過濾規(guī)則

3. root詳解

  <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="warnAppender"/>
    </root>
  • root中通常只有level一個屬性,表示默認(rèn)的日志級別。然后包括多個appender-ref來給不同級別的日志配置不同的appender。在沒有指定特殊的logger,所有按照root的格式輸出日志。

通過上面三部分,就可以自定義日志輸出。以下附一份完整的日志配置文件,實現(xiàn)把info,`warn’級別的日志分別輸出到不同的文件中,且生成滾動日志。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- INFO -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路徑 ,注意LOG_PATH是默認(rèn)值,
            它的配置對應(yīng)application.properties里的logging.path值-->
        <file>${LOG_PATH}/info/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名稱 -->
            <fileNamePattern>info/info-%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <!-- 文件最大保存歷史數(shù)量 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- WARN -->
    <appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路徑 ,注意LOG_PATH是默認(rèn)值,
            它的配置對應(yīng)application.properties里的logging.path值-->
        <file>${LOG_PATH}/warn/warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名稱 -->
            <fileNamePattern>warn/warn-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 文件最大保存歷史數(shù)量 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <logger name="com.maskwang.controller" level="info"
            additivity="false">
        <appender-ref ref="infoAppender" />
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="warnAppender"/>
    </root>

</configuration>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在logback學(xué)習(xí)筆記(上)中我們介紹了logback中的一些核心概念,在這篇文章中我們共同來學(xué)習(xí)一下如何利用配...
    阿龍的學(xué)與思閱讀 1,836評論 0 3
  • Logback是log4j框架的作者開發(fā)的新一代日志框架,它效率更高、能夠適應(yīng)諸多的運行環(huán)境,同時天然支持SLF4...
    李2牛閱讀 4,218評論 0 16
  • 一:根節(jié)點包含的屬性: scan: 當(dāng)此屬性設(shè)置為true時,配置文件如果發(fā)生改變,將會被重新加載,默認(rèn)值為tru...
    把愛放下會走更遠(yuǎn)閱讀 718評論 0 0
  • 我是一只 潛于深海的魚 我的憂傷 已埋葬了許多年 很疼很疼 夢中你的眼神 如同一個吻 就在不遠(yuǎn)的岸邊 可是我沒有魚...
    寂靜的花香閱讀 343評論 2 3
  • 星期六的下午參加日本抹茶的靜修沙龍。小小的房間整整齊齊,地上鋪了日式的榻榻米。幾位先到的朋友坐在蒲團(tuán)上等候了。 雖...
    Lily_Geng閱讀 321評論 0 0

友情鏈接更多精彩內(nèi)容