大家好屁使,我是IT修真院深圳分院第03期學(xué)員,一枚正直純潔善良的程序員奔则。今天給大家分享一下蛮寂,修真院官網(wǎng)JAVA(職業(yè))任務(wù)2的深度思考的擴(kuò)展部分 —— SLF4J 和 Log4j2 怎么使用?
1.背景介紹
SLF4J是怎么誕生的?
很久很久以前易茬,Apache說(shuō)服log4j以及其他的日志按照commons-logging的標(biāo)準(zhǔn)編寫酬蹋,但是由于commons-logging的類加載器有點(diǎn)問(wèn)題,實(shí)現(xiàn)起來(lái)也不友好抽莱,因此log4j的作者創(chuàng)作了SLF4J范抓,也因此與commons-logging平分天下。到底使用哪一個(gè)岸蜗,由開發(fā)者自己決定尉咕。
2.知識(shí)剖析
1)SLF4J到底是什么?
commons-logging和slf4j都是日志的接口璃岳,供用戶使用年缎,而沒(méi)有提供實(shí)現(xiàn)。log4j铃慷、logback单芜、java.logging才是日志的真正實(shí)現(xiàn)。當(dāng)我們調(diào)用接口時(shí)犁柜,接口的工程會(huì)自動(dòng)尋找恰當(dāng)?shù)膶?shí)現(xiàn)洲鸠,返回一個(gè)實(shí)現(xiàn)的實(shí)例。
2)SLF4J的實(shí)現(xiàn)原理什么馋缅?
3.常見問(wèn)題
1)Log4j怎么結(jié)合SLF4J扒腕?
2)Log4j結(jié)合SLF4J有什么優(yōu)勢(shì)?
4.解決方案
1)Log4j怎么結(jié)合SLF4J
A.添加SLF4J的jar包
B.添加適配器jar包:slf4j-log4j12
tip:實(shí)際只添加適配器jar包就可以了萤悴。
2)Log4j結(jié)合SLF4J有什么優(yōu)勢(shì)瘾腰?
有數(shù)據(jù)表明,一個(gè)應(yīng)用程序中大約有4%的代碼用來(lái)打日志覆履。在代碼中蹋盆,我們經(jīng)常需要把一些參數(shù)作為Debug級(jí)別的日志打印出來(lái)费薄,方便我們進(jìn)行調(diào)試。項(xiàng)目部署之前我們會(huì)把日志的級(jí)別調(diào)到INFO栖雾,項(xiàng)目正式運(yùn)轉(zhuǎn)的時(shí)候就不會(huì)打印Debug級(jí)別的日志楞抡。
但Log4j在這方面做的不太好,用到了isDebugEnable()并在項(xiàng)目剛運(yùn)行時(shí)就拼接字符串存到內(nèi)存里析藕,這樣不僅檢查了兩次日志級(jí)別召廷,并占用了內(nèi)存資源,導(dǎo)致性能比其他日志實(shí)現(xiàn)要差噪径。這種操作會(huì)使得我們的代碼看起來(lái)更像是在打日志而不是在實(shí)現(xiàn)某種功能柱恤。
通過(guò)結(jié)合SLF4J,Log4j也可使用參數(shù)替代字符串拼接找爱,這樣只會(huì)檢查一次日志級(jí)別,且只在需要輸出日志的時(shí)候才會(huì)拼接字符串泡孩。代碼更優(yōu)雅车摄、性能也有提升。
5.代碼實(shí)戰(zhàn)
1)Log4j結(jié)合SLF4J
2)Log4j結(jié)合SLF4J前后的性能對(duì)比
3)Log4j2怎么使用
4)Log4j和Log4j2的性能對(duì)比
6.擴(kuò)展思考
1)為什么要以類名作為logger的名字仑鸥?
首先我們要知道吮播,類通常以類代表的對(duì)象或者類可以實(shí)現(xiàn)的功能來(lái)命名,這種命名方式提高了可讀性眼俊,易于他人 識(shí)別意狠。同樣的,以類名作為logger的名字可以快速定位產(chǎn)生日志的類疮胖,還可以更精確地對(duì)每個(gè)類的日志級(jí)別环戈、輸出目的地和輸出樣式進(jìn)行調(diào)整。
2)Log4j 怎么遷移到 Log4j2澎灸?
A.前提條件
沒(méi)有調(diào)用Log4j-1.x的內(nèi)部方法院塞,比如Appenders(),LoggerRepository()
沒(méi)有使用代碼的方式配置Log4j
沒(méi)有調(diào)用DOMConfigurator或PropertyConfigurator這兩個(gè)類
B.替換jar包
把 Log4j-1.x.jar 換成 log4j-1.2-api.jar(這個(gè)jar包內(nèi)有l(wèi)og4j-api性昭、log4j-core兩個(gè)jar包)
C.修改代碼
首先要清楚拦止,jar包前綴不一樣,版本1是org.apache.log4j糜颠,版本2是org.apache.logging.log4j
a.版本1是Logger.getLogger( )汹族,改成版本2的LoggerManager.getLogger( )
b.版本1是Logger.getRootLogger( ),改成版本2的LoggerManager.getRootLogger( )
D.修改配置文件
log4j.properties換成log4j2.xml
7.參考文獻(xiàn)
參考一 ? ?Log4j2 官網(wǎng)
參考二 ? ?Log4j 遷移到 Log4j2
參考三 ? ?Log4j2 高級(jí)配置以及簡(jiǎn)單的示例
參考四 ? ?SFL4J 官網(wǎng)
8.更多討論
詳細(xì)的過(guò)程在下面的視頻中其兴。
今天的分享就到這里啦顶瞒,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)忌警、留言搁拙、拍磚~
技能樹.IT修真院
“我們相信人人都可以成為一個(gè)工程師秒梳,現(xiàn)在開始,找個(gè)師兄箕速,帶你入門酪碘,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷醚尉ィ”兴垦。
這里是技能樹.IT修真院,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線字柠,學(xué)習(xí)透明化探越,成長(zhǎng)可見化,師兄1對(duì)1免費(fèi)指導(dǎo)窑业∏蔗#快來(lái)與我一起學(xué)習(xí)吧。