之前介紹了在 《Spring boot中使用log4j記錄日志》 ,僅通過 log4j.properties log4j.properties
對日志級别進行控制,對于需要多環境部署的環境不是很友善,可能我們在開發環境大部分子產品需要采用DEBUG級别,在測試環境可能需要小部分采用DEBUG級别,而在生産環境時我們又希望采用INFO級别。這個時候,我們要自己手工編輯
檔案來調整日志級别,不論在版本庫中預設儲存哪個環境的級别設定,都會增加其他環境使用人員的工作量,雖然很細微,但是手工修改總不是一件很好的選擇,難免會發現修改後誤送出等問題。
那麼,有沒有辦法對于開發人員、運維人員都不需要改變源代碼實作不同環境的不同日志級别呢?
是否還記得之前在
《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
目錄: