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>
参考
原文地址:https://www.cnblogs.com/set-cookie/p/8836496.html
时间: 2024-10-24 17:23:17