博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2、java中的日志框架体系梳理(以故事的形式呈现)
阅读量:4035 次
发布时间:2019-05-24

本文共 2640 字,大约阅读时间需要 8 分钟。

日志算是java工具体系的一个知识点,但又是写代码的时候绕不过去的一个知识点,这篇文章主要是针对于小白,以故事的形式来对目前市场上常见的一些日志框架进行一个介绍和梳理。

阶段一:

从前有一个程序员,名字叫张三,张三呢,每天矜矜业业,业务能力代码能力都很强。老板就让他负责一个比较复杂的系统。于是张三呢,每天使用System.out.println(),在控制台打印出来一些关键的信息。这时候麻烦来了,项目需要上线了,总不能还要把这些没用的信息输出到控制台吧,于是老板让张三把这些语句全部去掉。这么庞大的系统,张三找呀找,终于把所有的System.out语句全部注释掉了。

阶段二:

过了一段时间呢,项目遇到了一些问题,老板突然想起来张三之前写过System.out的相关语句,觉得有必要把一些关键信息打印出来,于是又让张三把所有的System.out语句添加进来,这下子又把张三忙活的不轻,累了一天终于又改过来了。在找出错误之后,然后再重新去掉。

阶段三:

就这样来回折腾了几次,把张三气的不轻,毕竟需求总是会不断的变化的,于是张三考虑做一个框架,记录系统运行的一些必要的信息,这个框架就叫做日志框架,在这里且命名为logging-jar。

阶段四:

在第一代日志框架中,总是会把各种各样的运行信息打印出来,这对于张三来说只想要找出一些错误信息,他必须要在很长的一个控制台去寻找。于是张三考虑着如何改进这个框架,比如说把输出信息分类,有异常信息,有错误信息,还有警告信息等等。这对于张三来说,开发起来太便利了。叫做logging-good-jar。

阶段五:

老板一看,张三业务能力这么强,干脆把其他的一些项目也让张三带吧,于是张三又负责了一些其他的项目,但是问题又来了,其他的项目使用的不是张三的日志框架,而是其他的日志框架,怎么办呢?张三考虑着把这个项目的去掉,换成自己的不就可以了嘛,于是张三去掉了别人的,换成了自己的,又废了半天功夫更改了大量的日志api代码。

阶段六:

随着张三业务能力的不断增强,负责的项目也越来越多,接触到的日志框架也是残次不齐。于是张三考虑定义一些规则接口,其他的任何框架都要有相应的实现方法,这样做的好处就是每次张三就不需要去掉别人的,换成自己的。而是调用相应日志框架的相关实现即可。这个规则就叫做日志门面,也叫做日志框架的抽象层。实现这些规则接口的框架就叫做日志实现框架。

在这里插入图片描述

目前最受欢迎的就是这么几个。按照使用的角度来说,那就是左边选择一个日志门面,右边选择一个日志实现就好了。就这样他们之前进行了激烈的竞争。

Ceki Gülcü是一个java大佬,一开始发明了log4j,后来把这个捐给了Apache基金会,后来觉得这个功能不够牛,又发明了logback。logback一出来很离开,但是日志门面不能满足需求了,于是乎又设计了slf4j

阶段七:

随着时间的流逝,slf4j门面和logback日志实现框架脱颖而出。于是平时张三就用这个了。但是我们需要知道的是在使用的时候其实用的是日志门面slf4j的方法,而不用关心是哪一个实现的。springboot开发团队,一看这个搭配使用起来是真的好,于是就选用了他俩了。既然这么好,干脆我们使用springboot来整合一下他们俩。

第一步:添加依赖

ch.qos.logback
logback-classic
org.slf4j
jcl-over-slf4j

第二步:配置日志

在 src\main\resources 路径下创建logback.xml配置文件。

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
10MB

上面的这些都是模板代码,你可以直接拿来用。下面我们就直接使用。

第三步:使用

@RestController@RequestMapping("/logging")public class Hello{
@Autowired private HelloService helloService; private final static Logger logger = LoggerFactory.getLogger(Hello.class); @GetMapping("/test") public String test(){
logger.info("这是日志框架的输出信息"); return helloService.test(); }}

运行结果就不展示了。

在这里插入图片描述

转载地址:http://hibdi.baihongyu.com/

你可能感兴趣的文章
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>