文章目录
一 日志框架场景:
某项目开发人员二蛋,为了了解项目运行情况,在我们代码中加入了, System.out.println("…")来记录 日志,
有一天,项目经理觉得通过这种,System.out.println("…")的方式很搂,要他把把代码中的,System.out.println
给去掉,但是过了几天之后,项目出问题了,查询很棘手又没有日志,然后经理又要求他把 System.out.println加上,然后又去掉又加上…
情况一:
二蛋是一个脾气暴躁的人, 拿起板砖就跟经理干起来,然后牢底坐穿,全剧终 没用案例场景,下课。
情况二:
二蛋为了解决System.out.println("…")比较搂的情况,然后就写了一个记录日志的jar包名称叫 angle-logging.jar用来替代 System.out.println("…")
二蛋是一个爱专研的人,想出了一写比较牛逼的点子,比如日志异步记录, 日志归档。然后起名叫angle-logging-good.jar,
然后把项目中原来的angle-logging.jar中的卸下来,然后安装新的框架angle-logging-good.jar,但是 由于二种方式实现的接口可能不一样, 需要修改代码中的
日志打印类。 这种情况 这么办?
此时二蛋,想到了一个好的点子,我把angle-logging.jar 和angle-logging-good.jar的功能都抽取出来形 成一个门面angle-logging-intf.jar(也就是我们的接口) 然后在二个日志框架中实现不同的功能.这样,我的业务代码中直接使用的是我们的angle-logging-intf.jar的方法,然后根据需要导入了angle-logging.jar或者angle-logging-good.jar
二 我们Java中常用的日志框架是什么
2.1 我们常常听说的就是如下的日子框架,还不知道这么选?
①:JUL(java.util.logging) ,
②:JCL(Jakarta Commons-Logging) 由apache公司Jakarta 小组开发的,
③:JBoss-logging
④:logback
⑤:log4j
⑥:log4j2
⑦:slf4j(Simple Logging Facade for Java)
我们Spring底层选择的是我们的这个JCL做为日志门面的
SpringBoot 选择的是 SLF4J做为我们的日志门面(当时log4j,和logback)他选择了logback
2.2 加入我们系统使用的是SLF4J作为日志门面,我们是如何匹配
①:app(我们的应用系统)+日志门面(Slf4j slf4j-api.jar)+不加我们的日志实现 不会记录日志
②:app(我们的应用系统)+日志门面(Slf4j slf4j-api.jar)+logback(logback-classic.jar,logback-core.jar)
③:app(我们的应用系统)+日志门面(Slf4j slf4j-api.jar)+适配器(因为早期log4j 压根不知道有一slf4j的日志门面,所以降入适配器slf4j-log412.jar实现我们slf4j的接口,真正实现功能调用我们的log4j.jar)+log4j.jar
④:app(我们的应用系统)+日志门面(Slf4j slf4j-api.jar)+适配器(因为早期juc 压根不知道有一slf4j的日志门面,所以降入适配器slf4j-jdk14.jar实现我们slf4j的接口,真正实现功能调用我们的juc的jar包的功能)+juc.jar
⑤:app(我们的应用系统)+日志门面(Slf4j slf4j-api.jar)+slf4j(slf4j-simple.jar)
第一种情况(我们业务系统直接使用的是spring底层用的日志框架jcl+jdk的日志实现)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
public class MainClass {
private static Logger logger = Logger.getLogger(MainClass.class.getName());
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
logger.info("hello tuling");
ctx.start();
}
}
打印的日志格式是: (我们发现都是红色的)
第二种情况:(我们往pom依赖中加入log4j的包以及加入log4j的配置文件.spring 底层的日志门面使用的是jcl,实现貌似 使用了是log4j的格式)
<dependency>