Java常見日誌框架比較(SLF4J、Log4J、Log4J2、logback)
- 概要
- 日誌框架歷史?
- 門面日誌框架 VS 具體實現日誌框架?
- SLF4J應用之設計模式?
- 遺留問題 : 各第三方框架採用的日製框架不同 , 如何統一日誌框架?
- Spring Boot日誌框架配置?
- 門面日誌框架
為了讓接口與具體實現抽離,因此誕生了門面日誌框架,常見框架如下
- Jarkarta Common Logging
- 運行時動態綁定Log實現類
- 缺點 : 多ClassLoader導致的問題 , 2014年已停止維護
- SLF4J(Simple Logging Facade for Java)
- 編譯時綁定Log實現類
- 實現了項目與具體日誌框架解耦.統一了各種日誌框架的使用方法,降低重複的學習成本
- spring boot專案預設使用logback包,欲更換可進行排除
- spring boot <=1.3 版本支援log4j
- spring boot >=1.4 版本支援log4j2
- 執行slf4j程式與結果
slf4j因找不到具體日誌框架實作類,拋出錯誤
- org/slf4j/impl/StaticLoggerBinder.class會尋找所有SLF4J的實現類
- 實現org/slf4j/impl/StaticLoggerBinder.class與log4j
- 實現org/slf4j/impl/StaticLoggerBinder.class與log4j2
- 如果上述兩項接引用JAR包 , 系統會提示找到多個實現類、使用了哪一個JAR包
- SLF4J應用之設計模式?
- Facade模式
- 外部與一系统的通信必須通過一個統一的入口進行,使得子系统更易于使用
- 用在自定義utils?
- Netflix Zuul? Spring Cloud Getwate?
- Netflix 的閘道方案使用 Zuul,雖然最新版本是 Zuul 2,不過 Spring Cloud 整合的版本僅 Zuul 1,這中間的插曲是 Zuul 2 原本預計在 2016 年底左右發佈,然而卻拖到了 2018 年 4 月,在這段期間,Spring 就自己搞了個 Spring Cloud Gateway,不打算整合 Zuul 2 了。
- SLF4J提共了統一接口 , 使用者無需關心具體實現方式
- Adapter模式
- 如同轉接頭 , 將兩者功能能配合在一起使用
- 例如 , 因為在Log4J的發展歷史較早 , Log4J1並未考慮到後來出現的SLF4J , 因此SLF4J提共許多Adapter包 , 能夠與Log4J配合
- 遺留問題 : 各第三方框架採用的日誌框架不同 , 如何統一日誌框架?
- Spring Boot預設日誌配置?
- 僅載入 spring-boot-starter的情形下
- 使用 IntellJ 在pom.xml上按下右鍵開啟 Diamgram->Dependcy
- 可察看到 , 官方預設使用了sslf4j+logback作為日誌框架實現
- 還加入其他日誌框架橋接包, 替換成slf4j , 依情形僅需排除第三庫依賴的日誌依賴,spring boot自動幫你配置起來
補上json研究 logback -> 可以json不過不能自定義
回覆刪除Log4J2 有 threadContext可以用, 不過只能吃字串