Java日志认识
常见的字眼:jcl,jul,slf4j,logback,log4j,log4j2
说明:
日志体系分为两部分,一部分是日志门面,一部分是日志实现。
两者的关系:门面是接口,实现是对门面的支持。
栗子:以盖房子为例
方案一:我们找某个人来干活,突然间这个人毫无声息的跑了(日志不维护了、出现重大bug了等),这个时候我们就很难受了,如果重新找个人,这个人也能干活,但是干活的方式和第一个人不一样,他说我的方式和第一个得方式不一样,不兼容,得把之前那个人做的销毁掉,从头开始,然后工期长,money高。
方案二:我们一开始找一家公司来干活,中间他们的包工头不干了,然后你找公司,公司说重新安排一个人来给你们接着干活,不额外收钱
这两个方案就是日志具体实现和日志接口门面的区别,如果我们直接使用日志实现,当日志实现系统变更时,我们需要改很多对接的代码,但是如果在日志实现系统和调用者之间加一层转换器呢,我不管你日志实现系统变成谁,我都只找转换器,由他来和你对接,我需要实现什么需求直接和门面说就行了。(甲方(程序调用方)、乙方(门面)、日志实现者(苦逼程序员))
门面:jcl(common-logging),slf4j
具体实现:jul,logback,log4j,log4j2
slf4j一般选用搭配(官网上面的图片):
问题1:当选定一个搭配来作为系统的日志系统时,系统里框架自带的日志如何统一为选定的搭配输出:使用狸猫换太子大法,引入相应的替换包,把框架内自带的日志替换成我们想使用的搭配包
比如springboot:springboot整合了spring,而spring底层使用的是jcl门面,而springboot默认的是slf4j+logback的方式,spring-boot-starter这个包已经给我们把jcl这个门面的相应部分替换成slf4j门面了
问题2:当springboot引入自带日志的框架时怎么处理:排除掉要集成进来的框架的日志,不然springboot里面的日志替换包可能会和原有框架的包发生冲突
日志级别:
trace
springboot如何进行日志切换:
如:现在是slf4j+logback的搭配方式,想要换成slf4j+log4j的方式
-
排除掉spring boot中的替换包log4j-over-slf4j(原因是现在要引入log4j的包,和替换包会冲突)
-
-
引入log4j的适配包slf4j-log4j12
切换到log4j2:
-
排除掉spring-boot-starter-logging
-