zoukankan      html  css  js  c++  java
  • 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>
      

    在这里插入图片描述

  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181426.html
Copyright © 2011-2022 走看看