slf4j+logback 整合其他框架 maven

市面上的日志框架
JUL, JCL , Log4j , Log4j2, Logback , SLF4J.

Spring Boot 在框架内部使用 JCL , spring-boot-starter-logging 采用 slf4j+logback springboot 也能自动配置其他框架

日志的抽象层日志的实现类
JUL, SLF4J, Jboss-loggingLog4j, JUL, Log4J2, Logback

抽象层选择 slf4j , 日志实现选择 LogBack

Slf4j 使用

1. 如何在系统中使用slf4j

在这里插入图片描述
上图显示了应用使用slf4j的时候需要的配置,如果实现层使用logback则不需要适配,如果是其他的实现层,则需要中间适配层

每一个日志实现框架都有自己的配置文件,使用slf4j后,配置文件还是使用实现层的配置文件

不同框架中都有各自的日志实现,当我们引入了其他框架的时候,如何统一日志实现

在这里插入图片描述
统一系统所有日志框架
1. 将系统中其他日志框架先排除出去
2. 用中间包来替换原有日志框架
3. 导入我们slf4j其他的实现

springboot日志关系
	所有springboot项目中都会引入该依赖
	<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

在starter中又依赖了logging, 用它来做日志功能

	 <dependency>
	      <groupId>org.springframework.boot</groupId>
	      <artifactId>spring-boot-starter-logging</artifactId>
	      <version>2.2.6.RELEASE</version>
	      <scope>compile</scope>
    </dependency>

在这里插入图片描述
在starter-logging 中 springboot 导入了logback类和其他方法的转换层

接下来实际演示一下如何统一日志实现层

  1. 定义一个类使用Log4j 打印一句话
public class Dog{
	Public Void Bark(){
	// 该log 使用 slf4j 抽象类的方法返回 LOG4J 实现类
		Logger logger = LoggerFactory.getLogger(Dog.class);
		logger.info("汪汪汪")
	}
}

   <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

    </dependencies>
  1. 该工程就是模拟其他引入了非logback的框架,再创建一个工程模拟自身项目调用方法
<dependencies>
	// 引入带有log4j的模块
    <dependency>
        <groupId>com.meiya</groupId>
        <artifactId>UseLog4J</artifactId>
        <version>1.0-SNAPSHOT</version>
        // 1.把log4j排除
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
	//  2.引入替换log4j的中间包
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>1.7.25</version>
    </dependency>

	// 3. 引入需要整合的logback实体类
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>

原理分析

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>1.7.25</version>
    </dependency>

这个类的实现和log4j一模一样,所以引入的模块自身引入的log4j被排除后,调用的方法就是这个log4j-over-slf4j.jar 包下的内容.而这个jar包里面的实现类又调用了logback的底层实现,所以完成了替换.

ps 如果模块引用的是 slf4j 框架的产品则比较简单

引入slf4j 下的log4j

	<dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.6</version>
        </dependency>
    </dependencies>

引入的时候只要把slf4j 的log4j 移除即可直接使用

<dependencies>
    <dependency>
        <groupId>com.meiya</groupId>
        <artifactId>UseLog4J</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <artifactId>slf4j-log4j12</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>


    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

</dependencies>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值