• SpringBoot初识日志


    SpringBoot初识日志

    1、市面上的日志框架:

    JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…

    日志门面(日志的抽象层)日志实现
    SLF4j 、Jboss-logging、JCL(Jakarta Commons Logging)Log4j JUL(java.util.logging) Log4j2 Logback

    左边是抽象层,右边是他的实现

    日志门面:SLF4J;

    日志实现:Logback;

    SpringBoot:底层是Spring框架,Spring框架默认是用JCL;

    SpringBoot选用SLF4j和logback

    2、SLF4j的使用

    1、如何在系统中使用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以后,配置文件还是做成日志实现框架本身的配置文件。

    统一日志记录

    比如说在使用其他框架的时候,Spring使用的日志框架是Commons-logging,Hibernate使用的是Jboss-logging等等。

    我们要想统一日志记录,就比如全部改成SLF4j和Logback日志框架组合,该怎样做?

    这时的slfj已经帮我们想好了解决方案,

    如果日志框架是Commons-logging,想转成slf4j的使用,首先要去掉原来的日志依赖Commons-logging,再导入jcl-over-slf4j.jar,这个jar里面含有Commons-logging的实现类,也包含了slf4j的整合,所以可以转为对slf4j抽象层的使用。其余的日志框架也都有对应替换的jar包,这里不进行一一解释。

    总结:如何让系统中的所有日志都统一到slf4j

    1. 将系统中其他日志框架先排除去
    2. 用各个对应日志框架转为slf4j的中间jar包替换原有的日志框架
    3. 导入slf4j其他实现

    3、SpringBoot日志关系

    下图关系依赖是springboot2.2.4

    在这里插入图片描述

    总结:

    1. SpringBoot底层使用的slf4j+Logback的方式进行的日志记录

    2. SpringBoot也罢其他的日志都替换成了slf4j;

    3. 中间替换包例如 log4j-to-slf4j
      在这里插入图片描述

    它里面具体的操作还是对SLF4j的操作

    1. SpringBoot是Spring的一套快速配置脚手架,但是Spring内涵的日志框架是Commons-logging,在SpringBoot2.0+,SpringBoot并没有加载Spring的日志框架,直接使用slf4j日志作为统一,Logback是对slf4j抽象层的实现。

    2. 注意:如果要引入其他框架,一定要把这个框架的默认日志依赖移除掉。

      SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可。

      4、日志的使用

      1、默认配置

      root级别就是默认的级别,springboot日志root级别是info。

      @Test
          public void contextLoads() {
              //记录日志
              Logger logger = LoggerFactory.getLogger(getClass());
              //日志的级别由低到高: trace<debug<info<warn<error;输出日志的时候只会输出当前日志级别及其以上的日志信息
      
              logger.trace("logger trace level ...");
              logger.debug("logger debug level...");
              //springboot默认日志级别是info
              logger.info("logger info level...");
              logger.warn("logger warn level...");
              logger.error("logger error level...");
      
          }
         
      

    在这里插入图片描述
    要想修改隔离级别

    在application配置文件中设置,例如将日志默认级别设置成trace,最低的。

    logging.level.cn.edu.nyist.springboot03logging=trace
    

    cn.edu.nyist.springboot03logging是对应的项目名的路径

    日志输出路径和日志输出文件如果都不在配置文件中指定,默认只会在控制台输出

    logging.path=输出日志的指定路径

    # 在当前根目录下创建spring和里面的log文件夹,默认日志文件名是spring.log
    logging.path=/spring/log
    

    logging.file=输出的日志文件名,也可以指定路径;例如logging.file=D:/springboot.log;指定输出到D盘的xxx.log文件,文件没有会自行创建,如果不指定路径就会在当前项目下创建日志文件。

    #输出到文件中的日志格式
    logging.pattern.file=%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
    
    #输出到控制台的日志格式
    logging.pattern.console=%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
    

    2、指定配置

    Logging SystemCustomization
    Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
    Log4j2log4j2-spring.xml or log4j2.xml
    JDK (Java Util Logging)logging.properties

    直接在resources目录下创建日志配置文件,例如使用logback日志系统,创建logback.xml或者logback-spring.xml;

    但是这两个有什么区别吗?

    这里官方文档上推荐我们创建带spring的配置文件,因为这样可以使用SpringBoot的一些高级Profile功能,而logback.xml就不能使用,如果logback.xml使用了Profile功能,但是SpringBoot并不会解析它,所以就会报错。

    ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
    ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
    

    Profile-specific Configuration功能

    <springProfile name="dev">
        <!-- configuration to be enabled when the "dev" profile is active -->
        这里指定了接下来的配置在dev环境下执行
        
    </springProfile>
    

    切换日志框架

    将logback切换成log4j2

    1. 先去掉相关依赖[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

    2. 添加log4j2相关依赖

       <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
                  <exclusions>
                      <exclusion>
                          <artifactId>spring-boot-starter-logging</artifactId>
                          <groupId>org.springframework.boot</groupId>
                      </exclusion>
                  </exclusions>
      </dependency>
      <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-log4j2</artifactId>
      </dependency>
      

    在这里插入图片描述

  • 相关阅读:
    VIM技巧, .vimrc文件
    vSphere Client克隆虚拟机
    vSphere、 ESXi、Vcenter、vSphere Client关系
    消耗系统内存
    zabbix2.4汉化
    普通用户执行ansible权限被拒绝
    putty秘钥转换成xhell支持的格式
    zbb20170922 mysql 字符集设置 比较 utf8_general_ci、utf8_unicode_ci和utf8_bin的区别
    zbb20170920 页面调用qq
    zbb20170919 tomcat 8 启动异常 Could not publish server configuration for Tomcat v8.0 Server at localhost. Multiple Contexts have a path of "A".
  • 原文地址:https://www.cnblogs.com/dataoblogs/p/14121968.html
Copyright © 2020-2023  润新知