• springboot-日志框架


    1、日志框架简介

      对于一个应用程序来说,日志的记录是必不可少的一部分。线上的问题追踪,基于日志业务逻辑统计分析等都离不开日志。java领域存在许多已经写好成熟的日志框架,经常使用的有JCL(jakarta Commons logging), SLF4J(simple Logging facade java), jboss-logging, log4j, JUL(java.util.logging), log4j2, logback等。

      从实现来说,java框架分为两种,一种是日志门面(日志的抽象层)和日志实现,所以我们在选日志框架的时候,一般都是选一个日志门面,然后再选一个日志实现。其中,日志门面包括JCL(jakarta Commons logging), SLF4J(simple Logging facade java), jboss-logging等,而日志实现则包括 log4j, JUL(java.util.logging), log4j2, logback。

      Spring框架默认使用的就是JCL, 实现层可以选log4j或者log4j2,而Spring boot选用的是 SLF4J和logback

    2、日志框架之间的关系

      因为日志框架之间没用形成统一的接口,所我们在选日志门面和日志实现的时候不能选错。而日志抽象接口也基本分为两大阵营了,一个是JCL(jakarta Commons logging),另一个是SLF4J。

      Commons Logging和Slf4j是日志门面(门面模式是软件工程中常用的一种软件设计模式,也被称为正面模式、外观模式。它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用)。log4j和Logback则是具体的日志实现方案。可以简单的理解为接口与接口的实现,调用这只需要关注接口而无需关注具体的实现,做到解耦。

      其中比较常用的组合使用方式是Slf4j与Logback组合使用(SpringBoot),Commons Logging与Log4j组合使用(Spring)。

      Logback必须配合Slf4j使用。由于Logback和Slf4j是同一个作者,其兼容性不言而喻。

    3、SLF4J使用

      开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法,给系统导入slf4j和logback的实现jar包

    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");
      }
    }
    View Code

      加入我们想在springBoot使用其他框架实现呢,要怎么办?如下图

      

      比如我们先在SpringBoot中使用log4j框架日志,不仅仅要导入log4j.jar包,还要导入slf4j-log412.jar包,该jar包是一个是适配器,将slf4抽象接口和log4j进行适配。每一个日志的实现框架都有自己的配置文件,使用slf4j以后,配置文件还是做成日志实现框架的配置文件。

    4、日志级别

      日志级别由低到高:trace<debug<info<warn<error,日志会输出大于等于当前所设置的日志级别,比如我设置日志级别为info,则就输出info、warn、和error级别的日志信息,trace和debug将被忽视。我们还可以设置把日志写到文件中,比如配置  logging.file=d:/springboot.log,则会在d盘上生成springboot.log文件。logging.path配置的是制定日志文件生成在哪个文件夹。

        

  • 相关阅读:
    请用正则实现String.trim()
    事件委托的原理是什么?有什么作用?
    请简述get请求和post请求的区别
    用原生js实现,点击一个列表时,输出对应的索引
    请用js写一个函数,实现获取浏览器url中查询字符串中的参数并返回一个数组
    请描述一下cookies、sessionStorage、localStorage、session四者的区别?
    清除浮动的几种方式,各自的优缺点?
    如何使用离线存储(localStorage)?
    使用css怎么让谷歌支持小于12px的文字比如10px
    ajax有哪些方法可以实现跨域?他们都有哪些局限性?
  • 原文地址:https://www.cnblogs.com/Hxinguan/p/9098065.html
Copyright © 2020-2023  润新知