在Spring、Springboot中使用slf4j+logback日志框架的实现方案

第一章 介绍

1.1 为什么有日志及框架?

  1. 跟踪用户对系统访问
  2. 统计
  3. Debug

1.2 日志框架

市场上存在非常多的日志框架。

JUL(java.util.logging),JCL(Jakarta Commons Logging),Log4jLog4j2Logback(具体框架,springboot使用)SLF4j、jboss-logging等。

Spring 在框架内部使用JCL。

Log4j被apache收购,升级,改为log4j2,框架改动很大,只是借用之名。

Log4j,Logback,SLF4j都是同一个作者。

日志门面类似于接口,是一种规范,具体日志实现为这种规范下的一个落地实现产品。

1.3 优选slf4j+logback

第二章 原理

2.1 如何在系统中使用slf4j+logback

https://www.slf4j.org

2.2 使用slf4j+其他实现

需要中间的一个适配器包,去适配slf4j门面。

第三章 历史遗留问题

3.1 遗留问题解决

如何将这些框架统一日志记录,统一使用slf4j进行输出?

springboot(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx

https://www.slf4j.org/legacy.html

引入一个偷梁换柱包,使框架依赖的日志框架接口依然为老的接口,但具体内部方法实现已改为调用slf4j的接口。

3.2 将应用中所使用的日志框架commons-logging排除掉

3.3 引入jcl转换为slf4j依赖包(偷梁换柱)

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>jcl-over-slf4j</artifactId><!-- 替换commons-logging-->

       <version>1.7.25</version>

     </dependency>

第四章 我们的选择-优选slf4j+logback

4.1 将系统中其他日志框架先排除出去;(所有项目)

4.2 用中间包来替换原有的日志框架

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>jcl-over-slf4j</artifactId><!-- 替换commons-logging-->

       <version>1.7.25</version>

     </dependency> 

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>jul-to-slf4j</artifactId><!-- 替换java.util.logging-->

       <version>1.7.25</version>

     </dependency>

jul用不用导入是需要根据你项目中要用到的框架是否依赖jul有关

4.3 我们slf4j及其他的实现

     <dependency>

       <groupId>ch.qos.logback</groupId>

       <artifactId>logback-classic</artifactId><!-- 间接依赖logback-core--><!-- 优秀的日志实现-->

     </dependency>     

     <!-- slf4j(门面): Simple Logging Facade for Java :简单日志门面(接口)(类似JDBC);

          log4j:日志实现(类似数据库驱动);

          log4j2(实现), logback(实现),

          后来我们用slf4j+logback(最稳定的方案); -->

     <dependency>

       <groupId>org.slf4j</groupId>

       <artifactId>slf4j-api</artifactId><!-- 抽象层,接口-->

     </dependency>

4.4 测试代码

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class HelloWorld {

  public static void main(String[] args) {

       Logger logger = LoggerFactory.getLogger(TestLog.class);

       logger.debug("debug..."); //用于调试程序

       logger.info("info...");//用于请求处理提示消息

       logger.warn("warn...");//用于警告处理提示消息

       logger.error("error...");//用于异常处理提示消息

       logger.error("==>>"+logger.getClass());

       //class ch.qos.logback.classic.Logger

}

}

4.5 配置文件logback.xml

每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件

<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="true">

    <!-- 指定日志输出的地方-->

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <encoder>

            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{360} - %msg%n</pattern>

        </encoder>

    </appender>

    <!-- 日志:从低到高;只会打印指定级别以后的; additivity表示是否将日志信息反馈给root

     DEBUG==》INFO===》WARN===》ERROR

     <logger name="com.atguigu.atcrowdfunding.mapper" level="debug" additivity="false"> 

         <appender-ref ref="STDOUT"/> 

     </logger>

      -->

     <root level="info">

         <appender-ref ref="STDOUT" />

     </root>

</configuration>

 

发布了227 篇原创文章 · 获赞 77 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/m2606707610/article/details/104018110
今日推荐