欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決因缺少Log4j依賴導致應用啟動失敗的問題

 更新時間:2017年04月03日 12:00:37   作者:rhwayfunn  
日志是應用軟件中不可缺少的部分,Apache的開源項目log4j是一個功能強大的日志組件,提供方便的日志記錄。但這篇文章不是介紹Log4j,這篇文章主要介紹了關于因缺少Log4j依賴導致應用啟動失敗問題的相關資料,需要的朋友可以參考下。

前言

最近公司在做版本升級,所有對aaa(指代某個內部依賴)有依賴的應用需要排除掉。從這點看,幾乎不會有什么問題,因為僅僅是排除一些maven依賴而已嘛。但是,一位同學在排除依賴的時候,僅僅是把aaa排除了,而沒有在測試環(huán)境進行測試,在線上發(fā)布的時候,日志報dubbo服務注冊失?。⊕伄惓:蚫ubbo admin沒有看到注冊的服務),導致應用啟動失敗(回滾后正常),影響正常業(yè)務5分鐘。

事后排查這個問題的時候發(fā)現,有兩個原因導致了應用啟動失敗:

  1. 去除aaa依賴后,導致應用有多個slf4j的依賴
  2. 去除aaa依賴后,導致log4j依賴缺失(應用使用logback)

第一點很好解決,因為從error日志可以直接知道原因,修改pom依賴并把非logback實現的日志依賴排掉就好了。

但是,第二點折騰了一下午才最終確定是因為log4j依賴缺失導致的。

下面把排查過程記錄如下:

把應用回滾后正常,那么問題肯定出在回滾之后的提交上,經過和正常版本的代碼的diff,發(fā)現只有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>

分析到這里,已經有了解決思路,一種是直接修改zkclient的依賴,一種是繼續(xù)分析為什么兩種版本的不同會導致應用啟動失敗。通過繼續(xù)分析,發(fā)現groupId為com.101tec的日志框架使用的是Slf4j,而groupId為com.github.sgroschupf的日志框架是Log4j,而那位同事在排除aaa依賴的時候順便把log4j的依賴也排掉了,所以才導致應用啟動失敗。

com.github.sgroschupf的log框架:

com.101tec的log框架:

再回到剛開始dubbo注冊服務失敗的問題,一切都明了了——因為把log4j依賴排掉了,導致dubbo使用zkclient注冊服務的時候因為無法初始化Log4j,導致無法初始化ZkClient,進而導致dubbo注冊失敗。

通過這個事件,獲得如下教訓:

  1. 盡量在一個系統(tǒng)內使用同一個日志框架
  2. 如果是依賴jar有不同的日志實現,使用更高版本的依賴
  3. 發(fā)布之前一定要記得在測試環(huán)境進行測試

總結

以上就是關于因缺少Log4j依賴導致應用啟動失敗的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • Mybatis防止sql注入原理分析

    Mybatis防止sql注入原理分析

    這篇文章主要介紹了Mybatis防止sql注入原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java8 中使用Stream 讓List 轉 Map使用問題小結

    Java8 中使用Stream 讓List 轉 Map使用問題小結

    這篇文章主要介紹了Java8 中使用Stream 讓List 轉 Map使用總結,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-06-06
  • Java中Mybatis-Plus使用方式介紹

    Java中Mybatis-Plus使用方式介紹

    Mybatis-Plus提供了多種方式來執(zhí)行SQL,包括使用注解、XML映射文件和?Lambda表達式等,其中,使用Lambda表達式是Mybatis-Plus推薦的方式,因為它更加直觀和類型安全,,需要的朋友可以參考下
    2023-06-06
  • IDEA斷點調試,斷點不起作用的解決

    IDEA斷點調試,斷點不起作用的解決

    這篇文章主要介紹了IDEA斷點調試,斷點不起作用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring實戰(zhàn)之方法級別緩存用法示例

    Spring實戰(zhàn)之方法級別緩存用法示例

    這篇文章主要介紹了Spring實戰(zhàn)之方法級別緩存用法,結合實例形式分析了spring方法級別緩存配置、屬性文件、領域模型及相關使用技巧,需要的朋友可以參考下
    2020-01-01
  • Spring Cloud Feign實現文件上傳下載的示例代碼

    Spring Cloud Feign實現文件上傳下載的示例代碼

    Feign框架對于文件上傳消息體格式并沒有做原生支持,需要集成模塊feign-form來實現,本文就詳細的介紹一下如何使用,感興趣的可以了解一下
    2022-02-02
  • Java線程中sleep和wait的區(qū)別詳細介紹

    Java線程中sleep和wait的區(qū)別詳細介紹

    Java中的多線程是一種搶占式的機制,而不是分時機制。搶占式的機制是有多個線程處于可運行狀態(tài),但是只有一個線程在運行
    2012-11-11
  • Java中的注解機制Annotation詳解

    Java中的注解機制Annotation詳解

    這篇文章主要介紹了Java中的注解機制Annotation詳解,  Java Annotation 是 Java 語言中的一種 元數據機制,它可以在代碼中添加額外的信息,以便于程序的理解和處理,Annotation 可以用來描述類、方法、屬性等各種程序的特性,需要的朋友可以參考下
    2023-10-10
  • SpringBoot Admin用法實例講解

    SpringBoot Admin用法實例講解

    在本篇文章里小編給大家整理的是一篇關于SpringBoot Admin用法實例內容,有需要的朋友們可以參考學習下。
    2019-10-10
  • RabbitMQ進階之消息可靠性詳解

    RabbitMQ進階之消息可靠性詳解

    這篇文章主要介紹了RabbitMQ進階之消息可靠性詳解,abbitmq消息的投遞過程中,怎么確保消息能不丟失,這是一個很重要的問題,哪怕我們做了Rabbitmq持久化,也不能保證我們的業(yè)務消息不會被丟失,需要的朋友可以參考下
    2023-08-08

最新評論