Spring Boot(三): 在Spring Boot中使用log4j2,讓你的console端豐富起來。
阿新 • • 發佈:2019-02-16
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 一款外掛,可以根據級別來調整日誌輸出的顏色,這樣就可以清晰的查看了。可以自己改顏色。