把日志從log4j轉(zhuǎn)換成logback的經(jīng)歷

起因

我們的系統(tǒng)上了dubbo砚亭,dubbo默認(rèn)就使用的log4j1.x,之前一直用的好好的殴玛,突然有一天發(fā)現(xiàn)報(bào)表服務(wù)不響應(yīng)請(qǐng)求了捅膘,但是進(jìn)程并沒(méi)有掛,CPU滚粟、內(nèi)存都正常寻仗,最后通過(guò)jstack發(fā)現(xiàn)是日志的線(xiàn)程死鎖了。官方解釋在1.x的版本中坦刀,如果并發(fā)在10以上就有可能產(chǎn)生死鎖愧沟;

轉(zhuǎn)換經(jīng)過(guò)

既然log4j1.x出問(wèn)題了,之前用logback的時(shí)候又覺(jué)得挺爽了鲤遥,那么就抓緊換吧沐寺,老規(guī)矩,方案先行盖奈。經(jīng)過(guò)一番調(diào)查研究混坞,制定如下戰(zhàn)略:

  1. 加入logback的依賴(lài);
  2. 排除log4j的依賴(lài)钢坦;
  3. 排除common-logging的依賴(lài)究孕;
  4. 配置logback.xml;
  5. 使用maven-enforcer-plugin檢查log4j和common-logging的依賴(lài)爹凹;

1. 加入logback的依賴(lài)

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.19</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-access</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

對(duì)上面的幾個(gè)jar解釋下:

  • jcl-over-slf4j:把common-logging.jar橋接到slf4j厨诸,因?yàn)楹芏嗟谌絡(luò)ar包使用的是jcl的api;
  • logback-classic禾酱、ch.qos.logback:這兩個(gè)是logback的jar微酬,只要是用logback绘趋,就需要這兩個(gè)包;
  • log4j-over-slf4j:把log4j1.x.jar橋接到slf4j颗管,因?yàn)楹芏嗟谌絡(luò)ar包使用的是log4j1.x的api陷遮;
  • logback-ext-spring:logback為支持spring提供的擴(kuò)展包;

2. 排除log4j的依賴(lài)

這個(gè)可以通過(guò)idea的maven插件的Show Dependencies功能查看有那些包依賴(lài)了log4j垦江,然后一一配置exclusion帽馋。maven本身沒(méi)有全局排除的功能,這個(gè)確實(shí)比較郁悶比吭。另外發(fā)現(xiàn)有神人說(shuō)可以通過(guò)在私服上發(fā)布一個(gè)空的相同groupId+artifactId的jar來(lái)替換掉這些依賴(lài)绽族,個(gè)人感覺(jué)還是有點(diǎn)難以接受,感興趣的同學(xué)可以去試試梗逮。

3.排除common-logging的依賴(lài)

步驟同上一步项秉;

4.配置logback.xml

具體配置的內(nèi)容就不貼了,有興趣的看官方文檔慷彤。這里面關(guān)于logger的配置特別說(shuō)明一下娄蔼,在網(wǎng)上看到很多示例配置都是錯(cuò)的。

<logger name="cc.humor.logback" level="ERROR" additivity="true"/>

logger的additivity如果設(shè)置成false的話(huà)(默認(rèn)是true)底哗,那么一定要給logger加上appender岁诉,否則符合該規(guī)則的日志都不會(huì)輸出。

<logger name="cc.humor.logback" level="INFO" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
</logger>

5.使用maven-enforcer-plugin檢查log4j和common-logging的依賴(lài)

使用該插件后跋选,在編譯的時(shí)候就會(huì)檢查是否有l(wèi)og4j和common-logging的包被依賴(lài)了涕癣,如果有則編譯會(huì)不通過(guò)(雖然不能做全局的排除,但是好歹做個(gè)全局檢查吧 -_-!!!)前标。
但這里也有個(gè)不爽的地方坠韩,父子項(xiàng)目是不能繼承的,每個(gè)項(xiàng)目都需要設(shè)置炼列;

<plugin>                                                                         
    <groupId>org.apache.maven.plugins</groupId>                                  
    <artifactId>maven-enforcer-plugin</artifactId>                               
    <version>3.0.0-M1</version>                                                  
    <executions>                                                                 
        <execution>                                                              
            <id>enforce-banned-dependencies</id>                                 
            <goals>                                                              
                <goal>enforce</goal>                                             
            </goals>                                                             
            <configuration>                                                      
                <rules>                                                          
                    <bannedDependencies>                                         
                        <excludes>                                               
                            <exclude>log4j:log4j</exclude>                       
                            <exclude>commons-logging:commons-logging</exclude>   
                        </excludes>                                              
                        <searchTransitive>true</searchTransitive>                
                        <message>must exclude log4j and commons-logging</message>
                    </bannedDependencies>                                        
                </rules>                                                         
                <fail>true</fail>                                                
            </configuration>                                                     
        </execution>                                                             
    </executions>                                                                
</plugin>                                                                        

總結(jié)

網(wǎng)上以訛傳訛的資料比較多只搁,很多官方的資料又不是很好找,所以還是小做一番總結(jié)俭尖。如果有誰(shuí)想把dubbo+spring+springMVC的框架的log4j轉(zhuǎn)換到logback的話(huà)氢惋,希望這篇文章能幫到你。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稽犁,一起剝皮案震驚了整個(gè)濱河市焰望,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌已亥,老刑警劉巖熊赖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異虑椎,居然都是意外死亡震鹉,警方通過(guò)查閱死者的電腦和手機(jī)的妖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)足陨,“玉大人,你說(shuō)我怎么就攤上這事娇未∧担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵零抬,是天一觀的道長(zhǎng)镊讼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)平夜,這世上最難降的妖魔是什么蝶棋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮忽妒,結(jié)果婚禮上玩裙,老公的妹妹穿的比我還像新娘。我一直安慰自己段直,他們只是感情好吃溅,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鸯檬,像睡著了一般决侈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喧务,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天赖歌,我揣著相機(jī)與錄音,去河邊找鬼功茴。 笑死庐冯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痊土。 我是一名探鬼主播肄扎,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赁酝!你這毒婦竟也來(lái)了犯祠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酌呆,失蹤者是張志新(化名)和其女友劉穎衡载,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體隙袁,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痰娱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年弃榨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梨睁。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲸睛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坡贺,到底是詐尸還是另有隱情官辈,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布遍坟,位于F島的核電站拳亿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏愿伴。R本人自食惡果不足惜肺魁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隔节。 院中可真熱鬧鹅经,春花似錦、人聲如沸官帘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)刽虹。三九已至酗捌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涌哲,已是汗流浹背胖缤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阀圾,地道東北人哪廓。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像初烘,于是被迫代替她去往敵國(guó)和親涡真。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容