在spring中通常使用xml方式配置log4j。通常開發人員根據自身習慣會在本地開發環境設置令自己舒適的日誌打印級別,然而在團隊合作編程中,常因配置文件誤提交導致污染GIT遠程倉庫。
針對這個問題,這裏分享一個小經驗——藉助命令行參數在不改變文件的情況下,使配置更加的舒適
使用
- 首先修改xml配置文件的參數爲
${}
形式,如
<logger name="com.xxx.dao" level="${sys:log4j.level.dao:-WARN}" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
- 運行命令添加參數值設置自己的習慣級別,IDEA爲例在
VM options
後補加一個變量log4j.level.dao
的參數設定
-Dlog4j.level.dao=debug
此時,使用配置了該參數的啓動項啓動日誌級別即爲debug級別
說明
實際上,添加VM options參數的方式,不止適用於這裏,同樣適用於覆蓋已有的properties文件、yml文件的配置,只是log4j比較特殊,這裏特意寫篇博客單獨記述。
在log4j中,${}
的使用方式與其他地方有所不同
- log4j中的
${}
並不能識別項目的properties文件的內容 - log4j中的
${}
屬性引用格式與其他地方不同,下面具體解釋
在log4j中,${}
參數sys:log4j.level.dao:-WARN
中,sys
表示使用SystemPropertiesLookup
轉化參數,:
和:-
之間表示屬性名,:-
之後表示默認值。Lookup
的類型可在org.apache.logging.log4j.core.lookup.Interpolator#Interpolator(java.util.Map<java.lang.String,java.lang.String>)
中看到,有多個不同的lookup。
去官網轉了一圈,也有看到lookup使用的相關介紹鏈接,但說實話,沒看過源碼的話可能不是很好理解,所以最好還是稍微閱讀一下源碼
題外話,看了log4j部分源碼,實際上log4j獲取默認配置文件地址的源碼位於org.apache.logging.log4j.core.config.ConfigurationFactory.Factory#getConfiguration(boolean, java.lang.String)