天天看點

Spring Boot中對log4j進行多環境不同日志級别的控制

之前介紹了在 《Spring boot中使用log4j記錄日志》 ,僅通過

log4j.properties

對日志級别進行控制,對于需要多環境部署的環境不是很友善,可能我們在開發環境大部分子產品需要采用DEBUG級别,在測試環境可能需要小部分采用DEBUG級别,而在生産環境時我們又希望采用INFO級别。這個時候,我們要自己手工編輯

log4j.properties

檔案來調整日志級别,不論在版本庫中預設儲存哪個環境的級别設定,都會增加其他環境使用人員的工作量,雖然很細微,但是手工修改總不是一件很好的選擇,難免會發現修改後誤送出等問題。

那麼,有沒有辦法對于開發人員、運維人員都不需要改變源代碼實作不同環境的不同日志級别呢?

是否還記得之前在

《Spring Boot屬性配置檔案詳解》 一文中,提到的關于Spring Boot多環境的配置以及屬性檔案中的參數引用?若沒有了解過相關内容,建議先閱讀該文後繼續此篇内容。

https://blog.didispace.com/springbootlog4jmuilt/#%E5%B0%9D%E8%AF%95%E6%94%B9%E9%80%A0 嘗試改造

先以

chapter4-2-2工程

作為基礎工程,我們來進行多環境配置的改造。

  • 建立多環境配置檔案
    • application-dev.properties

      :開發環境
    • application-test.properties

      :測試環境
    • application-prod.properties

      :生産環境
  • application.properties

    中添加屬性:

    spring.profiles.active=dev

    (預設激活

    application-dev.properties

    配置)
  • application-dev.properties

    application-test.properties

    配置檔案中添加日志級别定義:

    logging.level.com.didispace=DEBUG

  • application-prod.properties

    logging.level.com.didispace=INFO

通過上面的定義,根據

logging.level.com.didispace

在不同環境的配置檔案中定義了不同的級别,但是我們已經把日志交給了log4j管理,看看我們log4j.properties中對com.didispace包下的日志定義是這樣的,固定定義了DEBUG級别,并輸出到名為didifile定義的appender中。

# LOG4J配置
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%      

那麼,要如何動态的改變這個DEBUG級别呢?在

中還提到了關于配置檔案中參數的引用。我們需要将DEBUG替換成

application-{profile}.properties

配置檔案中定義

logging.level.com.didispace

即可,是以配置變為如下内容:

# LOG4J配置
log4j.category.com.didispace=${logging.level.com.didispace}, 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      

到這裡我們已經完成了所有配置工作,我們可以通過運作單元測試,然後看my.log檔案中輸出的日志内容。通過修改預設的

application-dev.properties

配置的日志級别為INFO,再運作單元測試的DEBUG内容是否被輸出到了my.log中驗證參數是否被正确引用了。

對于不同環境的使用人員也不需要改變代碼或打封包件,隻需要通過執行指令中參加參數即可,比如我想采用生産環境的級别,那麼我可以這樣運作應用:

java -jar xxx.jar --spring.profiles.active=prod      

代碼示例

本文的相關例子可以檢視下面倉庫中的

chapter4-2-3

目錄: