java日志体系(SLF4J,JCL)

平时我们引用日志包打印日志时发现和我们预料中的不一致,最常见的就是明明配置了但确不打印日志,所以我简单总结了下java的日志体系.
一.我们日前常用的日志有log4j,log4j2,logback,jul,来协助我们打印日志。
常用日志

二.
jcl,slf4j为对应的门面,我理解门面其实就相当于java多态,它的实现是可插拔的,比如原来我们使用的logback,现在要替换为log4j2了,因为他们都是基于slf4j的,编码都是面向的接口,改动是无需修改代码,只需要替换依赖jar既可。
1.jcl
jcl支持log4j,jul,jdk13等日志,它是通过动态Class.forName加载的,
优先级为log4j->jul(>=jdk14自带)->jdk13->simpleLog顺序打印,比如动态Class.forName log4j包没有时候会自动再加载jul包,以此顺序,具体可以看log4j包中org.apache.commons.logging.impl.LogFactoryImpl类中classesToDiscover数组中加载顺序。不支持主流的log4j2,logback等,因此现在基本不用,或者用也会桥接到slf4j上。

<dependency>
   <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
 </dependency>

2.slf4j
slf4j可以支持当期主流的日志,log4j,log4j2,logback,当然也支持从jcl那部分桥接到slf4j上,引入依赖

<dependency>
    <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
</dependency>

适配器为中间适配包,比如log4j2,需要引入log4j-slf4j-impl
上面为要要使用日志和slf4j中间需要引入适配器,比如要是用log4j2,需要引入log4j-slf4j-impl.
三.桥接: 因为我们一个系统可能使用多种日志,这样管理日志文件非常费劲;例如:spring使用jcl,而我们业务代码中用的是log4j2(用slf4j门面),如果不合并可能我们就需要配置两份日志输出路径.因此我们可以通过桥接把jcl桥接到slf4j既可,这样同意变为log4j2了也方便管理,如下面的引入依赖

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>jcl-over-slf4j</artifactId>
   <version>1.7.32</version>
</dependency>

其它日志和slf4j桥接包
最后在整体发一张图
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值