1. 程式人生 > >Spring Boot(三): 在Spring Boot中使用log4j2,讓你的console端豐富起來。

Spring Boot(三): 在Spring Boot中使用log4j2,讓你的console端豐富起來。

maven依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!--剔除自帶logging-->
                <exclusion>
                    <
groupId
>
org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</
groupId
>
<artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!-- 加上這個才能辨認到log4j2.yml檔案 --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</
artifactId
>
</dependency>

新增配置檔案-log4j2.yml

  這邊使用的是yaml語法,總的來說還是比較簡單的。這裡拷貝了一份配置檔案,我自己填上了幾點註釋

Configuration:
  status: warn

  Properties: # 定義全域性變數
    Property: # 預設配置(用於開發環境)。其他環境需要在VM引數中指定,如下:
      #測試:-Dlog.level.console=warn -Dlog.level.xjj=trace
      #生產:-Dlog.level.console=warn -Dlog.level.xjj=info
      - name: log.level.console
        value: trace
      - name: log.level.xjj
        value: trace
      - name: log.path
        value: /home/dream/java/springboot/src
      - name: project.name
        value: my-spring-boot

  Appenders:
    Console:  #輸出到控制檯
      name: CONSOLE
      target: SYSTEM_OUT
      # 這個代表只有達到這個等級的才輸出,其它的都過濾掉
      ThresholdFilter:
        level: ${sys:log.level.console} # “sys:”表示:如果VM引數中沒指定這個變數值,則使用本檔案中定義的預設全域性變數值
        onMatch: ACCEPT
        onMismatch: DENY
      # 輸出格式
      PatternLayout:
        pattern: "%d{yyyy-MM-dd HH:mm:ss}:%4p %t (%F:%L) - %m%n"
    RollingFile: # 輸出到檔案,超過128MB歸檔
      - name: ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/${project.name}.log
        filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: "%d{yyyy-MM-dd HH:mm:ss}: %4p %t (%F:%L) - %m%n"
        Policies:
          SizeBasedTriggeringPolicy:
            size: "128 MB"
        DefaultRolloverStrategy:
          max: 1000

  Loggers:
    Root:
      level: debug
      AppenderRef:
        - ref: CONSOLE
        - ref: ROLLING_FILE
    Logger: # 為com.xjj包配置特殊的Log級別,方便除錯
      - name: com.xjj
        additivity: false
        level: ${sys:log.level.xjj}
        AppenderRef:
          - ref: CONSOLE
          - ref: ROLLING_FILE

1.根節點Configuration有兩個屬性:status和monitorinterval,有兩個子節點:Appenders和Loggers(表明可以定義多個Appender和Logger).

  • status用來指定log4j本身的列印日誌的級別.
  • monitorinterval用於指定log4j自動重新配置的監測間隔時間,單位是s,最小是5s.

2.Appenders節點,常見的有三種子節點:Console、RollingFile、File.

  • Console節點用來定義輸出到控制檯的Appender.
    • name:指定Appender的名字.
    • target:SYSTEM_OUT 或 SYSTEM_ERR,一般只設置預設:SYSTEM_OUT.
    • PatternLayout:輸出格式,不設定預設為:%m%n.
    • File節點用來定義輸出到指定位置的檔案的Appender.
    • name:指定Appender的名字.
    • fileName:指定輸出日誌的目的檔案帶全路徑的檔名.
    • PatternLayout:輸出格式,不設定預設為:%m%n.
  • RollingFile節點用來定義超過指定大小自動刪除舊的建立新的的Appender.
    • name:指定Appender的名字.
    • fileName:指定輸出日誌的目的檔案帶全路徑的檔名.
    • PatternLayout:輸出格式,不設定預設為:%m%n.
    • filePattern:指定新建日誌檔案的名稱格式.
    • Policies:指定滾動日誌的策略,就是什麼時候進行新建日誌檔案輸出日誌.
      • TimeBasedTriggeringPolicy:Policies子節點,基於時間的滾動策略,interval屬性用來指定多久滾動一次,預設是1 hour。modulate=true用來調整時間:比如現在是早上3am,interval是4,那麼第一次滾動是在4am,接著是8am,12am…而不是7am.
      • SizeBasedTriggeringPolicy:Policies子節點,基於指定檔案大小的滾動策略,size屬性用來定義每個日誌檔案的大小.
      • DefaultRolloverStrategy:用來指定同一個資料夾下最多有幾個日誌檔案時開始刪除最舊的,建立新的(通過max屬性)。

3.Loggers節點,常見的有兩種:Root和Logger.

  • Root節點用來指定專案的根日誌,如果沒有單獨指定Logger,那麼就會預設使用該Root日誌輸出
    • level:日誌輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
    • AppenderRef:Root的子節點,用來指定該日誌輸出到哪個Appender.
  • Logger節點用來單獨指定日誌的形式,比如要為指定包下的class指定不同的日誌級別等。
    • level:日誌輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
    • name:用來指定該Logger所適用的類或者類所在的包全路徑,繼承自Root節點.
      • AppenderRef:Logger的子節點,用來指定該日誌輸出到哪個Appender,如果沒有指定,就會預設繼承自Root.如果指定了,那麼會在指定的這個Appender和Root的Appender中都會輸出,此時我們可以設定Logger的additivity="false"只在自定義的Appender中進行輸出。

4.關於日誌level.
共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

等級 簡介
All 最低等級的,用於開啟所有日誌記錄.
Trace 是追蹤,就是程式推進以下,你就可以寫個trace輸出,所以trace應該會特別多,不過沒關係,我們可以設定最低日誌級別不讓他輸出.
Debug 指出細粒度資訊事件對除錯應用程式是非常有幫助的.
Info 訊息在粗粒度級別上突出強調應用程式的執行過程.
Warn 輸出警告及warn以下級別的日誌.
Error 輸出錯誤資訊日誌.
Fatal 輸出每個嚴重的錯誤事件將會導致應用程式的退出的日誌.
OFF 最高等級的,用於關閉所有日誌記錄.

Grep Console

IDEA 一款外掛,可以根據級別來調整日誌輸出的顏色,這樣就可以清晰的查看了。可以自己改顏色。
在這裡插入圖片描述