一文帶你瞭解logback的一些常用配置

springProfile標籤中定義多個環境

我們可以通過springProfile爲不同的環境配置不同的日誌輸出規則,比如生產環境不開啓console,級別爲info等 下面來看看示例,

logback-spring.xml文件,

<springProfile name="prod">
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</springProfile>
<springProfile name="dev">  
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
    </root>
</springProfile>

然後我們運行應用時,根據指定的spring.profile.active進行選擇對應的日誌配置,如何來指定運行時激活的profile呢,有很多方式,比如我們可以直接在yml文件中指定,

application.yml文件,

spring:
  profiles:
    active: prod

在程序啓動時,可以看到當前激活的profile,

The following profiles are active: prod

還有其它方式,不是本文的重點,就不多說了。

另外, springProfile的name可以包含多個名字,比如

<springProfile name="dev1,dev2,dev3">  
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
    </root>
</springProfile>

ThresholdFilter 日誌過濾

首先要說下日誌級別的定義,

  • ALL 各級包括自定義級別
  • DEBUG 指定細粒度信息事件是最有用的應用程序調試
  • ERROR 錯誤事件可能仍然允許應用程序繼續運行
  • FATAL 指定非常嚴重的錯誤事件,這可能導致應用程序中止
  • INFO 指定能夠突出在粗粒度級別的應用程序運行情況的信息的消息
  • OFF 這是最高等級,爲了關閉日誌記錄
  • TRACE 指定細粒度比DEBUG更低的信息事件
  • WARN 指定具有潛在危害的情況

它們關係如下:

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。

ThresholdFilter: 臨界值過濾器,過濾掉低於指定臨界值的日誌。比如,

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>

會過濾掉低於WARN的日誌。

我們可以通過這種方式對日誌進行分類,比如輸出正常日誌和錯誤日誌,就可以用類型下面這樣的配置,

<!--常規日誌-->
    <appender name="fcbox-uniorder" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>/app/applogs/test-system.log</File>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] [TxId : %X{PtxId} , SpanId : %X{PspanId}] [%logger:%L] %msg%n</pattern>-->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %sep[%thread] %sep%p %sep%c %sep[TxId : %X{PtxId} , SpanId : %X{PspanId}] %sep%msgToo%exToo%n</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>/app/applogs/test-system.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
    </appender>

    <!--warn和錯誤級別日誌-->
    <appender name="fcbox-uniorder-error"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>/app/applogs/test-system-error.log</File>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] [TxId : %X{PtxId} , SpanId : %X{PspanId}] [%logger:%L] %msg%n</pattern>-->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %sep[%thread] %sep%p %sep%c.%M \(%F:%L\) %sep[TxId : %X{PtxId} , SpanId : %X{PspanId}] %sep%msgToo%exToo%n</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>/app/applogs/test-system-error.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
    </appender>

控制檯輸出日誌

這個比較簡單,

<!--輸出到控制檯-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<Encoding>UTF-8</Encoding>-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] [%logger:%L] %msg%n</pattern>
        </encoder>
    </appender>

除了常用的encoder屬性,還可以設置target屬性,默認是System.out。

引入默認配置

一般springboot項目,我們會在logback.xml中看到這樣的配置,

<include  resource="org/springframework/boot/logging/logback/base.xml"/>

這是springboot默認提供的日誌配置,我們可以在springboot jar包下看到它的源碼,

<included>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>
</included>

可以看到引入了defaults.xml,console-appender.xml和file-appdender.xml,有興趣可以通過源碼繼續瞭解。這裏就不詳細說了。

springboot項目配置輸出sql

springboot項目已經不需要像以前的SSM一樣,類似下面這樣配置sql了,

<logger name="org.apache.ibatis" level="INFO"/>
<logger name="java.sql" level="INFO"/>

我們只需要把 root level設置成debug就可以看到mybatis的日誌了。但是這樣配置日誌又太多了,也不好追蹤問題。所以我們一般只需要配置dao所在的包就可以了,

<logger name="com.test.dao" level="DEBUG"></logger>

root的level還是info,這樣既能看到sql,也不會有其它太多日誌干擾。

在這裏插入圖片描述
歡迎大家關注我的公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章