slf4j與logback衝突,導致 log4j.properties不起作用,瘋狂打印debug級別日誌

 

1、bug現象:生產環境,日誌級別不受控,瘋狂打印debug級別的日誌,也連不到日誌平臺kibana。

                       此時已不能回滾,因爲,新上的RPC接口,已經被別的系統依賴。   

                       除了日誌問題,其它一切正常。   所以當前方法是,趕緊找到問題所在,解決掉。

2、將生產問題嘗試在測試環境復現

      結果:容器雲環境的測試環境復現了此問題(生產環境也是在容器雲);

                 Jenkins環境的測試環境未復現、本地啓動也未復現;

                 至此,不禁打了個問號,感覺是jar包衝突..... 

 

3、排查1:一開始以爲是jar包衝突,就使用maven helper插件,把所有衝突的jar包都exclusion解決掉,還是不行。

4、排查2:覺得剛纔的解決方法太籠統,沒有針對這個問題點進行排查問題;

                  就仔細看了下一開始的啓動日誌,發現是slf4j和logback的jar包衝突了,見下圖;網上查了下 ,也有相似問題;

                  至此定位到問題。

 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Listening for transport dt_socket at address: 8002
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/bestapp/apache-tomcat-8.5.23/webapps/ROOT/WEB-INF/lib/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/bestapp/apache-tomcat-8.5.23/webapps/ROOT/WEB-INF/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
14:06:26.781 [localhost-startStop-1] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
14:06:26.990 [localhost-startStop-1] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding [servletConfigInitParams] PropertySource with lowest search precedence
14:06:26.990 [localhost-startStop-1] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding [servletContextInitParams] PropertySource with lowest search precedence

 

5、解決問題:  找logback-classic-1.1.11 ,排掉

   (1)看pom文件裏的依賴,沒找到

   (2)看pom文件裏的間接依賴,沒找到

   (3)使用“mvn dependency:tree”,沒找到

     至此,陷入困境.............     這個 logback-classic-1.1.11.jar 包從何而來呢 ???????

   (4)換個思路,直接解壓war包,果然在目錄 /webapps/ROOT/WEB-INF/lib 下發現了  logback-classic-1.1.11.jar 。

      至此,又陷入疑問,你到底從何而來呢,又各種查找,還是沒找到它,包括讓容器組的人查,也沒查到原因,畢竟是只有在容器雲環境纔會出現這種問題(真的是用了各種方法)               

   (5)最後因爲急於解決生產的問題,所以用了個臨時方法,就是:在編譯階段把打包後的war包,解壓,然後進入目錄tomcat/webapps/ROOT/WEB-INF/lib,手動刪除logback-classic-1.1.11.jar,然後再打包,見下圖:

      測試環境,驗證通過後,發佈生產,問題解決。

      但至於爲什麼只有在容器環境,纔會在war包裏出現這個logback的jar包,這個問題,有時間還得繼續研究下。

 

6、總結:

      解決bug,要抓住問題關鍵點,不要想當然;

     遇到困境,跳出來,換個角度。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章