SpringBoot基礎篇日誌管理之logback配置文件

更多Spring文章,歡迎點擊 一灰灰Blog-Spring專題html

SpringBoot默認選用logback進行日誌管理,前一篇講述了默認配置日誌的參數,然而這些內容比較初級,並不必定能知足咱們更加特殊的需求(好比輸出到多個不一樣的配置文件,不一樣的包路勁選擇不一樣的輸出方式等)java

因此本篇的內容,主要介紹logback.xml配置文件的語法,雖然與SpringBoot自己沒有太多的關聯性,但在SpringBoot項目中卻很是實用git

<!-- more -->github

I. logback配置

也不針對語法進行逐一說明了,直接針對常見的xml配置文件進行分析,反正看完也會忘的,等到要用的時候,通常都是拷貝一個魔板,改更名啥的就over了spring

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- %m輸出的信息,%p日誌級別,%t線程名,%d日期,%c類的全名,%i索引【從數字0開始遞增】,,, -->
    <!-- appender是configuration的子節點,是負責寫日誌的組件。 -->
    <!-- ConsoleAppender:把日誌輸出到控制檯 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern>
            <!-- 控制檯也要使用UTF-8,不要使用GBK,不然會中文亂碼 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- RollingFileAppender:滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件 -->
    <!-- 如下的大概意思是:1.先按日期存日誌,日期變了,將前一天的日誌文件名重命名爲XXX%日期%索引,新的日誌仍然是demo.log -->
    <!--             2.若是日期沒有發生變化,可是當前日誌的文件大小超過1KB時,對當前日誌進行分割 重命名-->
    <appender name="story" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--若是隻是想要 Error 級別的日誌,那麼須要過濾一下,默認是 info 級別的,ThresholdFilter-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <File>logs/story.log</File>
        <!-- rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最經常使用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 活動文件的名字會根據fileNamePattern的值,每隔一段時間改變一次 -->
            <!-- 文件名:log/demo.2018-06-23.0.log -->
            <fileNamePattern>logs/arch/story.%d.%i.log</fileNamePattern>
            <!-- 每產生一個日誌文件,該日誌文件的保存期限爲3天 -->
            <maxHistory>3</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:這是活動文件的大小,默認值是10MB,測試時可改爲1KB看效果 -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <!-- pattern節點,用來設置日誌的輸入格式 -->
            <pattern>
                %d %p (%file:%line\)- %m%n
            </pattern>
            <!-- 記錄日誌的編碼:此處設置字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 指定項目中某個包,當有日誌操做行爲時的日誌記錄級別 -->
    <!-- 級別依次爲【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
    <!-- additivity=false 表示匹配以後,再也不繼續傳遞給其餘的logger-->
    <logger name="com.git.hui" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="story"/>
    </logger>

    <logger name="com.github.hui" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="story"/>
    </logger>

    <!-- 控制檯輸出日誌級別 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

1. appender

從前面的配置文件中,appender這個標籤算是比較重要的,上面定義了兩類,一個控制檯輸出,一個文件輸出app

a. 控制檯or文件的選擇

appender的class屬性來選擇框架

  • 控制檯: ch.qos.logback.core.ConsoleAppender
  • 滾動時間窗口文件:ch.qos.logback.core.rolling.RollingFileAppender

b. 輸出格式

以實例 <pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern> 進行說明spring-boot

{% blockquote 官網翻譯@一灰灰Blog https://logback.qos.ch/manual/layouts.html%}學習

  • %m輸出的信息,
  • %p日誌級別,
  • %t線程名,
  • %d日期,
  • %c類的全名,
  • %i索引【從數字0開始遞增】
  • %M方法名
  • %lines輸出日誌的行數
  • %F/%file源碼文件名

{% endblockquote %}測試

c. 日誌歸檔相關

通常是天天歸檔一下日誌文件,避免全部的日誌都堆積到一個文件,當單文件特別大時,分析也不是一件容易的事情,常見的兩個設置參數

<!-- 日誌文件最多保存三天 -->
<maxHistory>3</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <!-- maxFileSize:這是活動文件的大小,默認值是10MB,測試時可改爲1KB看效果 -->
    <maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>

2. logger

另一個標籤就是logger了,name表示哪些包路徑下的日誌輸出會匹配這個(或者logger直接使用了這個name,也會匹配他)

另外兩個重要的屬性,level表示輸出日誌的級別,挺實用的,能夠根據實際場景設置某些日誌輸出,如框架層我只關係WARN級別日誌;我本身的業務可能就像關注INFO的日誌了

additivity 這個屬性,很容易不設置,若是不設置,那麼當一個日誌輸出,有多個logger匹配時,這個日誌就會被輸出屢次,建議設置爲false

II. 使用

根據前面配置的博文說明,logback.xml配置文件,推薦的用法是

  • 命名爲 logback-spring.xml
  • 放在資源文件的根目錄,或者config目錄下

通常輸出日誌的用法,最多見的兩種方式

// 建立LOGGER對象
private static final Logger LOGGER = LoggerFactory.getLogger(SelfBeanLoader.class);

// 輸出日誌的地方
LOGGER.info("info: {}", xxxx);

第二中就是使用lombok的 @Slf4j 註解

@Slf4j
public class SelfBeanLoader {
  ...
  // 輸出日誌的地方
  log.info("xxx");
}

III. 其餘

0. 項目

推薦相關博文閱讀

1. 一灰灰Blog

一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛

2. 聲明

盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

一灰灰blog

QrCode

知識星球

goals

相關文章
相關標籤/搜索