猩球崛起之程序员小站的变强之路-日志篇(一)

:日志框架场景:

某项目开发人员维战,为了了解项目运行情况,在我们代码中加入了,System.out.println("*****")来记录  日志,有一天,项目经理觉得通过这种,System.out.println("*****")的方式很low,要他把把代码中 的,System.out.println给去掉,但是过了几天之后,项目出问题了,查询很棘手又没有日志,然后经理又要求他把System.out.println加上,。。。。。。。。然后又去掉。。。。。又加上.......

情况一:

维战是一个脾气暴躁的人,拿起板砖就跟经理干起来,然后牢底坐穿,,,全剧终,,,,,,,  没用案例场景,,,,,,下课。。。。。。

情况二:

维战为了解决System.out.println("*****")比较low的情况,然后就写了一个记录日志的jar包名称叫chn-tower-logging.jar用来替代 System.out.println("*****")

维战是一个爱专研的人,想出了一写比较牛逼的点子,,,,比如日志异步记录, 日志归档。。。。。。然后起名叫chn-tower-logging-good.jar然后把项目中原来的chn-tower-logging.jar中的卸下来,然后安装新的框架chn-tower-logging-good.jar,

但是 由于二种方式实现的接口可能不一样,需要修改代码中的日志打印类。这种情况 这么办?

此时二蛋,想到了一个好的点子,我把chn-tower-logging.jar 和chn-tower-logging-good.jar的功能都抽取出来形成一个门面chn-tower-logging-intf.jar(也就是我们的接口)然后在二个日志框架中实现不同的功能.这样,我的业务代码中直接使用的是我们的chn-tower-logging-intf.jar的方法,然后根据需要导入了chn-tower-logging.jar或者chn-tower-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的日志实现)

 1 <dependency>
 2 <groupId>org.springframework</groupId>
 3 <artifactId>spring-context</artifactId>
 4 <version>4.3.20.RELEASE</version>
 5 </dependency> 
 6 
 7 public class MainClass {
 8     private static Logger logger = Logger.getLogger(MainClass.class.getName()); 
 9     public static void main(String[] args) {
10         AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
11 
12         logger.info("hello zhangjiang"); 
13         ctx.start();
14     }
15 }

打印的日志格式是:我们发现都是红色

 

 

 

 

 

第二种情况:(我们往pom依赖中加入log4j的包以及加入log4j的配置文件,spring  底层的日志门面使用的是jcl,实现貌似使用了是log4j的格式)

 1 <dependency>
 2 <groupId>org.springframework</groupId>
 3 <artifactId>spring-context</artifactId>
 4 <version>4.3.20.RELEASE</version>
 5 </dependency>
 6 
 7 <!--log4j的日志-->
 8 <dependency>
 9 <groupId>log4j</groupId>
10 <artifactId>log4j</artifactId>
11 <version>1.2.17</version>
12 </dependency>
13 
14 import org.apache.log4j.Logger;
15 
16 private static Logger logger = Logger.getLogger(MainClass.class.getName()); 
17 public static void main(String[] args) {
18     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
19 
20     logger.info("hello zhangjiang"); 
21     ctx.start();
22 }

日志打印情况:

 

 系统和我们自己的都是log4j格式

posted @ 2020-10-26 20:31  powerZhangFly  阅读(121)  评论(0)    收藏  举报