SLF4J 和 Log4j2

大家好,我是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.更多討論

詳細的過程在下面的視頻中。


SLF4J 和 Log4j2_騰訊視頻


PPT戳這里


今天的分享就到這里啦,歡迎大家點贊、轉發(fā)、留言、拍磚~

技能樹.IT修真院

“我們相信人人都可以成為一個工程師,現(xiàn)在開始,找個師兄,帶你入門,掌控自己學習的節(jié)奏,學習的路上不再迷?!?。

這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導??靵砼c我一起學習吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,214評論 1 13
  • 前言 最近學習開java web服務器開發(fā),開始學習java,處理業(yè)務邏輯,但對其中的日志比較好奇,之前沒怎么接觸...
    九風萍舟閱讀 3,415評論 1 6
  • 在項目開發(fā)過程中,我們可以通過 debug 查找問題。而在線上環(huán)境我們查找問題只能通過打印日志的方式查找問題。因此...
    Java架構閱讀 3,572評論 2 41
  • 大家好,我是IT修真院北京分院第22期的學員,一枚正直純潔善良的JAVA程序員 今天給大家分享一下,修真院官網(wǎng)JA...
    林氏名義閱讀 1,366評論 0 2
  • 20170816 0940 ZCLC記正式發(fā)布ACI 3.0了。好消息。3年了, 新技術成了老技術了。新產(chǎn)品也變成...
    taoza閱讀 449評論 0 1

友情鏈接更多精彩內容