SpringBoot2.1-gradle-整合log4j2
阿新 • • 發佈:2018-12-22
簡介
最近在研究springboot+gradle。需要新增日誌,現在springboot主流日誌就屬logback和log4j了。但是log4j後來拋棄了之前log4j的不足,以及吸取了優秀的logback的設計重新推出的一款新元件。log4j2的社群活躍很頻繁而且更新的也很快。所以這篇主要是講怎麼整合log4j2的帖子。
注意
值得注意的是,spring boot 1.3版本支援log4j,在spring boot 1.4的版本中,就需要使用log4j2,否則會出現如下錯誤:
Project build error: ‘dependencies.dependency.version’ for org.springframework.boot:spring-boot-starter-log4j:jar is missing.
一、修改build.gradle
由於springboot本身自帶的logback,會導致衝突。所以這塊需要排除預設日誌。
configurations {
//remove default logger
all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
然後新增log4j依賴
implementation('org.springframework.boot:spring-boot-starter-log4j2')
二、log4j2整合方式
log4j2主要有兩種方式去整合:
- 使用 .properties 進行整合。
- 使用 .xml 進行整合。
我在剛開始整合時,使用的是.properties的方式。但是中間出現了一些問題。所以改用了xml方式。
部落格連結: xml教程
但是由於.properties方式的失敗。導致我特別想用第一種方式搞出來。
三、properties檔案
這個可以從log4j官網中找到,可以根據自己需求更改一些引數即可。
# log4j2內部自身的日誌級別
status = error
# 配置日誌資訊輸出到哪裡:err表示作為標準錯誤輸出,還可以是一個檔案路徑或者一個URL
dest = err
# 配置名稱
name = PropertiesConfig
# 自定義屬性名稱,以便在之後的配置中使用,如${filename}
property.filename = target/rolling/rollingtest.log
# 級別過濾(過濾日誌記錄)
filter.threshold.type = ThresholdFilter
# 只記錄debug級別以上的日誌,大小寫都可以
filter.threshold.level = debug
# 控制檯型別的日誌輸出源
appender.console.type = Console
# 名稱 :唯一
appender.console.name = STDOUT
# 佈局型別
appender.console.layout.type = PatternLayout
# 輸出模板格式 這是springboot
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %C{1.} [%t]: %m%n
# 過濾級別 ThresholdFilter:低於級別的不輸出
appender.console.filter.threshold.type = ThresholdFilter
# 記錄日誌的級別
appender.console.filter.threshold.level = error
# 滾動檔案,會根據配置如檔案大小或者時間自動生成一個新檔案
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
# 日誌檔名稱
appender.rolling.fileName = ${filename}
# 日誌回滾的檔案命名規則
appender.rolling.filePattern = target/rolling2/test1-%d{MM-dd-yyyy}-%i.log.gz
appender.rolling.layout.type = PatternLayout
# 輸出格式
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
# 滾動日誌的策略,即設定何時新建日誌檔案輸出日誌
appender.rolling.policies.type = Policies
# 設定時間
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
# 指定多久滾動一次 單位跟著filePattern配置精度最後一位 ,這裡就是2秒了
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
# 日誌檔案的大小
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
# 為了測試設定小一點
appender.rolling.policies.size.size=1kb
## 還有其他的觸發條件如:CronTriggeringPolicy 按Cron表示式進行的 具體使用可自行搜尋
# 指定同一個資料夾下最多有幾個日誌檔案時開始刪除最舊的,建立新的
appender.rolling.strategy.type = DefaultRolloverStrategy
# 最多5個檔案,其實還是看filePattern的i的值,當大於5後,就會自動覆蓋了
appender.rolling.strategy.max = 5
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
記錄日誌的級別
這時候你會發現控制器裡沒有日誌那是因為下面這句導致。解決方案: error => debug
# 記錄日誌的級別
appender.console.filter.threshold.level = error