一、日志框架
1、必须要明白
1.1、SLF4J
SLF4J(Simple Logging Facade For Java);
是日志的门面,什么叫门面?就是日志的抽象层?再说详细点:就是一个接口规范,类似于JDBC那种,只提供一个门面,谁想要具体的,你们自己各大厂商去实现。比如目前的实现者:logback。
1.2、log4j、logback、log4j2
日志的具体实现,其中log4j和logback是基于SLF4J接口规范进行实现的。
1.3、注意
SLF4J、log4j、logback是一家公司出的。先有的log4j,后来发现性能有问题,在log4j上改造又太麻烦,所以直接重新开发个logback,但是为了规范和以后维护升级,就出了一个规范SLF4J。而log4j2其实只是Apache出的一套日志框架,也很完美。
二、使用和疑难
1、SLF4J关系图
image.pngPS:每一个日志的实现框架都有自己的配置文件,使用slf4j后,配置文件还是做成日志实现框架本身(比如logback)的配置文件。
2、疑难
比如我们现在的框架是SSH,问题来了,如下:
比如我们现在的项目再用slf4j+logback
,而Spring用的是commons-logging
、Hibernate用的是jboss-logging
,这该怎么办呢?我们只想用slf4j+logback
。
看图:
image.png这张图很好的说明了彼此之间的关系,若我们要用slf4j+logback
,则我们引入三个jar包(slf4j-api.jar/loback-classic.jar/loback-core.jar
)即可,我们还用到了Spring,Spring内置了commons-logging
,则我们还需要额外引入jcl-over-slf4j.jar
,这样我们才能看到Spring的输出日志。这个包相当于桥接一下,或者适配一下。
原理就是:jcl-over-slf4j.jar
包会包含他所替代的包(commons-logging
)的全部类,并且完美的和slf4j结合,所以就是当spring输出日志调用commons-logging
里面的api时,会转发到jcl-over-slf4j.jar
这个包里的对应的api方法,然后此包会调用slf4j-api的包,slf4j的调用logback,这样一套流程就通了。就是用桥接包替换老包,桥接包包含老包全部类,并能完美的与slf4j相结合。
3、疑难总结
如何让系统中所有的日志都统一到slf4j;
- 1、将系统中其他日志框架先排除出去
- 2、用中间包来替换原有的日志框架
- 3、我们导入slf4j其他的实现
三、广告
-
QQ群【Java初学者学习交流群】:458430385
-
微信公众号【Java码农社区】
- 今日头条号:编程界的小学生
网友评论