javascript
log4j自定义配置文件(SpringMVC项目)
問題來源
本周在實(shí)際項(xiàng)目中發(fā)現(xiàn)無法自定義的log4j-dev配置的error日志級(jí)別文件無法生效,項(xiàng)目啟動(dòng)后仍然采用默認(rèn)的info級(jí)別日志進(jìn)行打印。之所以自定義名稱,是為了減少隔離不同環(huán)境的日志級(jí)別,比如開發(fā)dev環(huán)境使用debug、info級(jí)別,而線上環(huán)境使用error級(jí)別。如果是采用默認(rèn)的文件名稱log4j.properties那么是可以生效的,但是在部署到不同環(huán)境時(shí)需要手動(dòng)進(jìn)行更改,容易遺忘。
于是在同事的協(xié)助下花時(shí)間研究了一波log4j的源碼,最終完美解決
解決過程
我的log4j-dev.properties文件放置在resources目錄下,springmvc環(huán)境(非springboot)
1、在web.xml引入Log4jConfigListener的監(jiān)聽器.
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j-dev.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>6000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>2、刪除原來的log4j.properties文件,以及各個(gè)子模塊下的log4j.properties文件。必須要?jiǎng)h除所有的默認(rèn)名稱文件。或者保留默認(rèn)文件,但是默認(rèn)文件里的配置項(xiàng)的key必須同自定義配置文件log4j-dev.properties一致,value可以不同。
3、對(duì)第2點(diǎn)的解釋Log4jConfigListener源碼發(fā)現(xiàn),如果存在默認(rèn)文件會(huì)讀取到默認(rèn)文件的所以配置項(xiàng),然后讀取自定義文件的配置項(xiàng),然后進(jìn)行覆蓋掉默認(rèn)的配置項(xiàng)。如果沒有默認(rèn)配置文件,則直接讀取classpath:log4j-dev.properties文件。
主要源碼心得
Log4j容器初始化過程時(shí)序圖
web環(huán)境log4jweb初始化過程時(shí)序圖:
主要類:
總結(jié)
以上是生活随笔為你收集整理的log4j自定义配置文件(SpringMVC项目)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux修改hosts主机映射文件
- 下一篇: ReactJS快速入门