springboot 日誌框架

Java 有不少日誌系統,例如,Java Util Logging, Log4J, Log4J2, Logback 等。Spring Boot 也提供了不一樣的選項,好比日誌框架能夠用 logback 或 log4j 等。web

 

默認的日誌框架 logback

例如,maven 依賴中添加了 spring-boot-starter-logging。spring

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>

那麼, Spring Boot 應用將自動使用 logback 做爲應用日誌框架, Spring Boot 啓動的時候,由 org.springframework.boot.logging.Logging.Logging-Application-Listener 根據狀況初始化並使用。apache

值得注意的是,默認狀況下,Spring Boot 使用 logback 做爲應用日誌框架。由於 spring-boot-starter 其中包含了 spring-boot-starter-logging,該依賴內容就是 Spring Boot 默認的日誌框架 logback。app

日誌級別

默認狀況下,Spring Boot 配置 ERROR, WARN, INFO 三種日誌級別。若是須要 Debug 級別的日誌。在 src/main/resources/application.properties 中配置數據源信息。框架

debug=true

此外,配置 logging.level.* 來具體輸出哪些包的日誌級別。maven

例如spring-boot

logging.level.root=INFO
logging.level.org.springframework.web=DEBUG

日誌文件

默認狀況下, Spring Boot 日誌只會輸出到控制檯,並不會寫入到日誌文件,所以,對於正式環境的應用,咱們須要經過在 application.properites 文件中配置 logging.file 文件名稱和 logging.path 文件路徑,將日誌輸出到日誌文件中。測試

logging.path = /var/tmp
logging.file = xxx.log logging.level.root = info

若是隻配置 logging.path,在 /var/tmp文件夾生成一個日誌文件爲 spring.log。若是隻配置 logging.file,會在項目的當前路徑下生成一個 xxx.log 日誌文件。ui

值得注意的是,日誌文件會在 10MB 大小的時候被截斷,產生新的日誌文件。spa

經常使用的日誌框架 log4j

若是,咱們但願使用 log4j 或者 log4j2,咱們能夠採用相似的方式將它們對應的依賴模塊加到 Maven 依賴中。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> </dependency>

或者

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>

log4j 依賴模塊加到 Maven 依賴中後,在 src/main/resources 目錄下加入 log4j-spring.properties 配置文件。Spring Boot 官方推薦優先使用帶有 –spring 的文件名做爲你的日誌配置, 例如 log4j-spring.properties,固然使用 log4j.properties 也是支持的。

經過以下配置,設定root日誌的輸出級別爲INFO,appender爲控制檯輸出stdout

# LOG4J配置
log4j.rootCategory=INFO, stdout

# 控制檯輸出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

輸出到文件

在開發環境,咱們只是輸出到控制檯沒有問題,可是到了生產或測試環境,或許持久化日誌內容,方便追溯問題緣由。能夠經過添加以下的appender內容,按天輸出到不一樣的文件中去,同時還須要爲log4j.rootCategory添加名爲file的appender,這樣root日誌就能夠輸出到logs/all.log文件中了。

#
log4j.rootCategory=INFO, stdout, file

# root日誌輸出
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.file=logs/all.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

分類輸出

當咱們日誌量較多的時候,查找問題會很是困難,經常使用的手段就是對日誌進行分類,好比:

  • 能夠按不一樣package進行輸出。經過定義輸出到logs/my.log的appender,並對com.didispace包下的日誌級別設定爲DEBUG級別、appender設置爲輸出到logs/my.log的名爲didifile的appender。
# com.didispace包下的日誌配置
log4j.category.com.didispace=DEBUG, didifile

# com.didispace下的日誌輸出
log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.didifile.file=logs/my.log
log4j.appender.didifile.DatePattern='.'yyyy-MM-dd
log4j.appender.didifile.layout=org.apache.log4j.PatternLayout
log4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n
  • 能夠對不一樣級別進行分類,好比對ERROR級別輸出到特定的日誌文件中,具體配置能夠以下。

log4j.logger.error=errorfile
# error日誌輸出
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.file=logs/error.log
log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd
log4j.appender.errorfile.Threshold = ERROR
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=%d
{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
相關文章
相關標籤/搜索