日志框架那点事

日志框架介绍

一、简介

日志框架
市场上存在非常多的日志框架。JUL(java.util.logging),JCL(Apache
Commons Logging),Log4j,Log4j2,Logback、SLF4j、jboss-logging等。
Spring Boot在框架内容部使用JCL,spring-boot-starter-logging采用了
slf4j+logback的形式,Spring Boot也能自动适配(jul、log4j2、logback) 并
简化配置。

日志框架那点事_第1张图片

我们在使用的过程中,是左边选一个门面,右边选一个实现,在我们日常开发中,日志门面最常用的是SLF4j,jboss-logging几乎没用过,而JCL最新一次更新已经是2014年了。所以日志门面无疑我们会选择SLF4j,日志实现我们选用Log4j或者Logback,Logback是Log4j的升级版本。

这里说明一下:SLF4j与Log4j和Logback是出自同一人之手,Logback是Log4j的升级版本,所以兼容性肯定是最强的。Log4j2是假借Log4j的大名由Aparche公司开发的,功能也非常强大。只不过目前使用的还比较少。

所以日常开发中,我们可以选择slf4j+ Log4j,或者slf4j+ Logback 。像SpringBoot中使用的就是slf4j+ Logback。

二、使用

日常开发中,最常用的日志门面就是SLF4j,既然有了门面,所有我们在使用的时候,接口直接使用SLF4j的接口,而不是使用实现类的接口:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

在SLF4j的官网,详细介绍该怎么使用,下面我们来看一下官网(https://www.slf4j.org/)的一张图片:

日志框架那点事_第2张图片

上图给出了,我们使用SLF4j和不同的日志实现需要引入的jar包:

slf4j+logback:slf4j-api.jar 、logback-classic.jar、logback-core.jar

slf4j+log4j : slf4j-api.jar 、log4j.jar、slf4j-log4j12.jar

slf4j+JUL: slf4j-api.jar 、slf4j-jdk14.jar

slf4j+simple: slf4j-api.jar、 slf4j-simple.jar

在使用SLF4j+log4j 的时候,由于log4j比slf4j出现的要早,所以需要加一个适配层也就是slf4j-log4j12.jar。另外,每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文
件。

三、历史遗留问题的解决

假如我们开发中使用的是slf4j+logback,但是我们的项目中引入了其他框架,例如使用了spring,hibernate,mybatis等。然后spring使用的日志框架是common-logging,而hibernate使用的是jboss-logging,那么该怎么解决呢?如何统一让引入的框架都是用slf4j来输出日志?

其实slf4j的官网给出了解决方案,看下图:

日志框架那点事_第3张图片

我们在正常使用自己所选用的日志实现方式的同时,将其他框架依赖的日志实现jar用一个中间转换jar包替换掉。可以说是一个狸猫换太子。既然是替换,肯定是先将其他日志框架依赖的jar包排除掉,然后引入中间包。例如:

spring使用的是commons-logging,那么我们首先要将commons-logging这个依赖exclution掉,然后引入jcl-over-slf4j.jar,来替代commons-logging,从而嫁接刀slf4j上。

同样的,使用log4j-over-slf4j.jar来替换log4j.jar;

你可能感兴趣的:(java,slf4j,slf4j)