日誌框架總結
阿新 • • 發佈:2018-04-15
classic ack AS 使用 引入 ref 簡介 mon www.
1 日誌框架簡介
(參考:http://xfhnever.com/2015/09/20/log-java-2/)
各種日誌框架可以分為兩類:
- 日誌實現框架:jdk自帶的logging(jul),log4j1、log4j2、logback
- 日誌門面,即提供統一的接口不提供實現:apache的commons-logging(jcl)、slf4j
2 日誌實現框架需要的jar包
- log4j:
- log4j:log4j1的全部內容
- log4j2:
- log4j-api:log4j2定義的API
- log4j-core:log4j2上述API的實現
- logback:
- logback-core:logback的核心包
- logback-classic:logback實現了slf4j的API
3 slf4j需要的jar包
- slf4j-api
4 slf4j轉向具體日誌實現框架
項目中使用slf4j接口進行編程,而slf4j並沒有整整的日誌實現,需要我們加入日誌實現依賴,並引入slf4j到某個具體日誌實現的橋梁
- slf4j-jdk14:slf4j到jdk-logging的橋梁
- slf4j-log4j12:slf4j到log4j1的橋梁(之前一直以為是到log4j2的橋梁,引起錯誤)
- log4j-slf4j-impl:slf4j到log4j2的橋梁(log4j2使用該包)
- logback-classic:slf4j到logback的橋梁
- slf4j-jcl:slf4j到commons-logging的橋梁
5 日誌實現轉向slf4j
例如包使用log4j作為日誌實現,而我們的項目使用log4j2作為日誌實現,那麽我們可以將log4j的日誌輸出交給slf4j,slf4j再交給log4j2來輸出。這一部分主要用來進行實際的日誌框架之間的切換
- jul-to-slf4j:jdk-logging到slf4j的橋梁
- log4j-over-slf4j:log4j1到slf4j的橋梁
- jcl-over-slf4j:commons-logging到slf4j的橋梁
6 最佳實踐
一般使用slf4j提供統一的日誌接口,加上slf4j到具體日誌實現的橋梁,最後再引入具體的日誌實現。如使用log4j2的配置
<!--slf4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!--橋梁-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.9.1</version>
</dependency>
<!--log4j2-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
參考
- http://xfhnever.com/2015/09/20/log-java-2/
- https://www.cnblogs.com/hafiz/p/6170702.html
日誌框架總結