Java

Java日志体系整体梳理

2021-08-04  本文已影响0人  无量散人

一、Java日志体系的发展历程

二、Java日志框架的关系和依赖

1、依赖关系

JCL支持日志组件不多(spring默认使用JCL输入日志),所以基本上没太多人用,现在主要以slf4j体系为主

image.png image.png

以上两张图的意思是如果你想用slf4j作为日志门面的话,你如何去配合使用其他日志实现组件,这里说明一下(注意jar包名缺少了版本号,在找版本时也要注意版本之间是否兼容)

除了slf4j本身需要引入的slf4j-api.jar之外,其它还需要:

2、JCL桥接到slf4j

对于新项目来说,一般会使用logback+slf4j日志框架。那对于依赖的第三方(如spring框架)使用了log4j或者jul的怎么办,如何统一输出?答案是桥接器

比如:本项目使用的日志框架依赖是logback+slf4j日志框架

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.21</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.7</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
  <version>1.1.7</version>
</dependency>

可以添加如下的桥接器(将jul和log4j重定向到slf4j)

<!-- https://mvnrepository.com/artifact/org.slf4j/jcl-over-slf4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/log4j-over-slf4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>

具体的思路:
1、确定日志Facade,一般就是slf4j
2、确定日志实现框架,不同的日志框架针对slf4j都提供绑定器,也就是说slf4j可以配合大部分日志实现使用

3、管理依赖项目中的日志框架,拦截且重定向到slf4j中

3、循环引用问题

想象这样一种情况,通过桥接器将log4j的日志全部重定向到slf4j,然后slf4j又再次绑定到了log4j实现,死循环了。


image.png

三、Java日志框架各个jar包作用总结

1、各个jar包的总结

2、集成总结

commons-logging与其他日志框架集成

slf4j与其他日志框架集成

四、Java日志框架最佳实践

1、最佳实践建议:

2、阿里Java日志规范

【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架
SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
上一篇 下一篇

猜你喜欢

热点阅读