zoukankan      html  css  js  c++  java
  • springboot日志

    3.18

    目录

     

    1.日志

    2.SLFS4j的使用

       实现

       遗留问题

       3.springboot日志关系

       4.springboot默认配置

     

     

    1.日志

    日志门面(日志的抽象层) 日志实现

    JCL(jakarta Commons Logging)SLF4j(Simple Logging Facade for Java) jboss-logging

    Log4j JUL(iava.util.logging) Log4j2 Logback

    左边选一个门面(抽象层),右边选择一个来实现

    springboot:底层是spring框架,spring框架默认是JCL;springboot选用SFL4j和logback。

    2.SLF4j的使用

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

    http://www.slf4j.org/manual.html

    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的实现:

    1.应用里只导了SLF4J的jar,进行日志的记录和调用,会输出到一个空的位置,因为没有任何实现。

    2.应用里导入slf4j-api.jar和logback的jar包  调用slf4j的接口,用logback来实现。

    3.应用里导入slf4j-api.jar、slf4j-log412.jar、log4j.jar

    由于log4j出现的早于slf4j,设计时没考虑到slf4j的存在。为了让log4j也能符合slf4j的规范,需要中间的适配层slf4j-log412.jar。

    适配层实现抽象层slf4j的具体方法,在适配层的方法里进行真正日志记录的时候调用log4j。

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

      比如:用log4j的来做日志实现,就写log4j的配置文件;用logback来做日志实现,就写logback的配置文件。

    遗留问题:项目中有 slf4j+logback、Spring(commons-logging)、Hibernate(jboss-logging)、Mybatis··· ···

    目的:统一日志记录,即使是别的框架也统一使用slf4j进行输出。

    方法:1.将系统中其他日志框架先排除出去,用中间包替换原有的日志框架

             用jcl-over-slf4j.jar替换commons-logging.jar

             用log4j-over-slf4j.jar替换log4j.jar

             用jul-to-slf4j.jar替换java.util.logging API

            2.导入slf4j其他的实现

    3.springboot日志关系

    springboot用它来使用日志功能

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </dependency>

     打开pom.xml 左键

     可以看到2.0版本的springboot底层依赖关系:

    使用logback记录日志,把 jul-to-slf4j log4j-to-slf4j  日志框架转为slf4j

    通过spring-jcl 将commons-logging 转换为slf4j

     

    总结:

    1.springboot底层也是使用slf4j+logback的方式进行日志记录

    2.springboot也把其他的日志都替换成了slf4j

    如果要引入其他框架,一定要把默认日志框架移除

    spring框架用的是commons-logging,springboot能自动适配所有日志,而且底层使用slf4j+logback记录日志,引入其他框架只需要将这个框架引入的日志文件排除。

    在1.x版本的springboot中可以看到:spring-core.pom已把commons-logging排除

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.20.RELEASE</version>
      <exclusions>
        <exclusion>
          <artifactId>commons-logging</artifactId>
          <groupId>commons-logging</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    在2.0版本的springboot,转换器直接写到了jcl原本包里,jcl就是用slf4j

    spring-core.pom

      <dependencies>
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.2.3</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-to-slf4j</artifactId>
          <version>2.10.0</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>jul-to-slf4j</artifactId>
          <version>1.7.25</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>

    4.springboot默认配置

    1.按springboot的默认配置输出日志

     @Test
        public void text(){
            //日志的级别 由低到高trace<debug<info<warn<error
            //可以调整输出的日志级别,日志就只会在这个级别以后的高级级别生效
            //springboot默认使用的是info级别的,所以只会输出info及以后的内容,也称root级别
            logger.trace("trace");
            logger.debug("debug");
            logger.info("info");
            logger.warn("warn");
            logger.error("error");
        }

    输出:

    2020-03-18 19:09:47.607  INFO 18038 --- [           main] com.example.demo.DemoApplicationTests    : info
    2020-03-18 19:09:47.607  WARN 18038 --- [           main] com.example.demo.DemoApplicationTests    : warn
    2020-03-18 19:09:47.607 ERROR 18038 --- [           main] com.example.demo.DemoApplicationTests    : error

    更改默认配置:

    在application.properties中加入,将springboot的日志默认级别改为trace,则trace及级别大于trace的内容都可以输出

    logging.level.com=trace

    输出:

    2020-03-18 21:02:44.968 TRACE 21636 --- [           main] com.example.demo.DemoApplicationTests    : trace
    2020-03-18 21:02:44.968 DEBUG 21636 --- [           main] com.example.demo.DemoApplicationTests    : debug
    2020-03-18 21:02:44.968  INFO 21636 --- [           main] com.example.demo.DemoApplicationTests    : info
    2020-03-18 21:02:44.969  WARN 21636 --- [           main] com.example.demo.DemoApplicationTests    : warn
    2020-03-18 21:02:44.969 ERROR 21636 --- [           main] com.example.demo.DemoApplicationTests    : error

    建立springboot.log文档,在application.properties中加入:

    #不指定路径在当前项目下生成spring.log,也可以指定完整路径
    #2.2版本 生成日志
    logging.file.path=/Users/mac/Desktop/springboot.log
    #2.0版本可以用 2.2版本已过时
    logging.file=springboot.log

    springboot对于日志的默认配置可以看源码:org.springframework.boot.logging.logback

    2.指定配置

    给类路径下放上每个日志框架自己的配置文件(相关规则见官网)即可,springboot就不使用默认配置了

  • 相关阅读:
    Python机器学习(六十九)Matplotlib 其他类型图形
    Python机器学习(六十八)Matplotlib 多个图形
    Python机器学习(六十七)Matplotlib 图形绘制
    Python机器学习(六十六)Matplotlib 基本概念
    Python机器学习(六十五)Matplotlib 入门
    Python机器学习(六十四)SciPy 统计
    Python机器学习(六十三)SciPy 信号处理
    Python机器学习(六十二)SciPy 优化
    Python机器学习(六十一)SciPy 图像处理
    Python机器学习(六十)SciPy 线性代数
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/12520763.html
Copyright © 2011-2022 走看看