1.日志适配器
日志适配器:使用slf4j作为门面,底层实现为其他日志实现,至少要引两个包
一个slf4j:一个第三方日志包,然后根据时间先后关系,像log4j2在slf4j之前上市,那么如果要使用slf4j+log4j2,那么还需要引入一个包log4j-slf4j-impl,用来适配兼容性,这个包就是日志适配器。如果使用slf4j+logback,那么就不需要额外引入适配器,因为已经兼容。
举例:项目使用slf4j+log4j2
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.0</version>
</dependency>
<!--slf4j与log4j2的适配器-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
常用适配器
A. jul
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
B. log4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
C.log4j2
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.14.1</version>
</dependency>
D. logback
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-alpha5</version>
</dependency>
2.日志桥接器
日志桥接器:桥接器重写了log4j2,类名功能都一样,但是实现了slf4j接口。引入桥接器,排除实现。完美替代log4j2的类。将第三方日志的接口桥接到slf4j上,因为slf4j可以和各种日志实现搭配使用,所以桥接器的作用就是将当前的日志换到slf4j,然后要想使用其他的日志实现,就可以引入对应的坐标,这样就起到一个系统里面的日志切换效果。
桥接器命名规范一般是:实现类-over/to-门面
举例实时业务场景:现在系统用的是log4j2,但是现在想换成logbak,代码不用动。
- 注释/删除项目中的log4j2依赖坐标
- 正常情况下,这个时候代码就会报错,因为没有对应的类了,此时就需要对应的桥接器了,引入log4j-to-slf4j-2.x.x.jar,这个包里面有和log4j2一样路径的类,这样代码导包就不会报错了。
- 引入slf4j+logbak包即可
常用日志桥接器:
A. log4j --> slf4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
B. log4j2 --->slf4j
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.14.1</version>
</dependency>
C. jul--->slf4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
D. jcl --->slf4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
log4j转log4j2
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.9.1</version>
</dependency>