解決因缺少Log4j依賴導(dǎo)致應(yīng)用啟動(dòng)失敗的問題
前言
最近公司在做版本升級(jí),所有對(duì)aaa(指代某個(gè)內(nèi)部依賴)有依賴的應(yīng)用需要排除掉。從這點(diǎn)看,幾乎不會(huì)有什么問題,因?yàn)閮H僅是排除一些maven依賴而已嘛。但是,一位同學(xué)在排除依賴的時(shí)候,僅僅是把a(bǔ)aa排除了,而沒有在測試環(huán)境進(jìn)行測試,在線上發(fā)布的時(shí)候,日志報(bào)dubbo服務(wù)注冊失?。⊕伄惓:蚫ubbo admin沒有看到注冊的服務(wù)),導(dǎo)致應(yīng)用啟動(dòng)失?。ɑ貪L后正常),影響正常業(yè)務(wù)5分鐘。
事后排查這個(gè)問題的時(shí)候發(fā)現(xiàn),有兩個(gè)原因?qū)е铝藨?yīng)用啟動(dòng)失?。?/strong>
- 去除aaa依賴后,導(dǎo)致應(yīng)用有多個(gè)slf4j的依賴
- 去除aaa依賴后,導(dǎo)致log4j依賴缺失(應(yīng)用使用logback)
第一點(diǎn)很好解決,因?yàn)閺膃rror日志可以直接知道原因,修改pom依賴并把非logback實(shí)現(xiàn)的日志依賴排掉就好了。
但是,第二點(diǎn)折騰了一下午才最終確定是因?yàn)閘og4j依賴缺失導(dǎo)致的。
下面把排查過程記錄如下:
把應(yīng)用回滾后正常,那么問題肯定出在回滾之后的提交上,經(jīng)過和正常版本的代碼的diff,發(fā)現(xiàn)只有zkclient的版本不同。
異常版本的依賴是如下:
<dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
正常的依賴是:
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency>
分析到這里,已經(jīng)有了解決思路,一種是直接修改zkclient的依賴,一種是繼續(xù)分析為什么兩種版本的不同會(huì)導(dǎo)致應(yīng)用啟動(dòng)失敗。通過繼續(xù)分析,發(fā)現(xiàn)groupId為com.101tec的日志框架使用的是Slf4j,而groupId為com.github.sgroschupf的日志框架是Log4j,而那位同事在排除aaa依賴的時(shí)候順便把log4j的依賴也排掉了,所以才導(dǎo)致應(yīng)用啟動(dòng)失敗。
com.github.sgroschupf的log框架:

com.101tec的log框架:

再回到剛開始dubbo注冊服務(wù)失敗的問題,一切都明了了——因?yàn)榘裭og4j依賴排掉了,導(dǎo)致dubbo使用zkclient注冊服務(wù)的時(shí)候因?yàn)闊o法初始化Log4j,導(dǎo)致無法初始化ZkClient,進(jìn)而導(dǎo)致dubbo注冊失敗。
通過這個(gè)事件,獲得如下教訓(xùn):
- 盡量在一個(gè)系統(tǒng)內(nèi)使用同一個(gè)日志框架
- 如果是依賴jar有不同的日志實(shí)現(xiàn),使用更高版本的依賴
- 發(fā)布之前一定要記得在測試環(huán)境進(jìn)行測試
總結(jié)
以上就是關(guān)于因缺少Log4j依賴導(dǎo)致應(yīng)用啟動(dòng)失敗的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Springboot如何切換默認(rèn)的Tomcat容器
這篇文章主要介紹了Springboot如何切換默認(rèn)的Tomcat容器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Windows編寫jar啟動(dòng)腳本和關(guān)閉腳本的操作方法
腳本文件,通常放入/bin目錄下,編寫啟動(dòng)腳本需要保證能夠識(shí)別到對(duì)應(yīng)的jar文件,其次需要保證能夠識(shí)別到/config中的配置文件信息,這篇文章主要介紹了Windows編寫jar啟動(dòng)腳本和關(guān)閉腳本的操作方法,需要的朋友可以參考下2022-12-12

