大家好,我是IT修真院深圳分院第03期學員,一枚正直純潔善良的程序員。今天給大家分享一下,修真院官網(wǎng)JAVA(職業(yè))任務2的深度思考的擴展部分 —— SLF4J 和 Log4j2 怎么使用?
1.背景介紹
SLF4J是怎么誕生的?
很久很久以前,Apache說服log4j以及其他的日志按照commons-logging的標準編寫,但是由于commons-logging的類加載器有點問題,實現(xiàn)起來也不友好,因此log4j的作者創(chuàng)作了SLF4J,也因此與commons-logging平分天下。到底使用哪一個,由開發(fā)者自己決定。
2.知識剖析
1)SLF4J到底是什么?
commons-logging和slf4j都是日志的接口,供用戶使用,而沒有提供實現(xiàn)。log4j、logback、java.logging才是日志的真正實現(xiàn)。當我們調用接口時,接口的工程會自動尋找恰當?shù)膶崿F(xiàn),返回一個實現(xiàn)的實例。

2)SLF4J的實現(xiàn)原理什么?

3.常見問題
1)Log4j怎么結合SLF4J?
2)Log4j結合SLF4J有什么優(yōu)勢?
4.解決方案
1)Log4j怎么結合SLF4J
A.添加SLF4J的jar包
B.添加適配器jar包:slf4j-log4j12
tip:實際只添加適配器jar包就可以了。
2)Log4j結合SLF4J有什么優(yōu)勢?
有數(shù)據(jù)表明,一個應用程序中大約有4%的代碼用來打日志。在代碼中,我們經(jīng)常需要把一些參數(shù)作為Debug級別的日志打印出來,方便我們進行調試。項目部署之前我們會把日志的級別調到INFO,項目正式運轉的時候就不會打印Debug級別的日志。
但Log4j在這方面做的不太好,用到了isDebugEnable()并在項目剛運行時就拼接字符串存到內存里,這樣不僅檢查了兩次日志級別,并占用了內存資源,導致性能比其他日志實現(xiàn)要差。這種操作會使得我們的代碼看起來更像是在打日志而不是在實現(xiàn)某種功能。
通過結合SLF4J,Log4j也可使用參數(shù)替代字符串拼接,這樣只會檢查一次日志級別,且只在需要輸出日志的時候才會拼接字符串。代碼更優(yōu)雅、性能也有提升。
5.代碼實戰(zhàn)
1)Log4j結合SLF4J
2)Log4j結合SLF4J前后的性能對比
3)Log4j2怎么使用
4)Log4j和Log4j2的性能對比
6.擴展思考
1)為什么要以類名作為logger的名字?
首先我們要知道,類通常以類代表的對象或者類可以實現(xiàn)的功能來命名,這種命名方式提高了可讀性,易于他人 識別。同樣的,以類名作為logger的名字可以快速定位產(chǎn)生日志的類,還可以更精確地對每個類的日志級別、輸出目的地和輸出樣式進行調整。

2)Log4j 怎么遷移到 Log4j2?
A.前提條件
沒有調用Log4j-1.x的內部方法,比如Appenders(),LoggerRepository()
沒有使用代碼的方式配置Log4j
沒有調用DOMConfigurator或PropertyConfigurator這兩個類
B.替換jar包
把 Log4j-1.x.jar 換成 log4j-1.2-api.jar(這個jar包內有l(wèi)og4j-api、log4j-core兩個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.參考文獻
參考一 ? ?Log4j2 官網(wǎng)
參考二 ? ?Log4j 遷移到 Log4j2
參考三 ? ?Log4j2 高級配置以及簡單的示例
參考四 ? ?SFL4J 官網(wǎng)
8.更多討論
詳細的過程在下面的視頻中。
今天的分享就到這里啦,歡迎大家點贊、轉發(fā)、留言、拍磚~
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現(xiàn)在開始,找個師兄,帶你入門,掌控自己學習的節(jié)奏,學習的路上不再迷?!?。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導??靵砼c我一起學習吧。