zoukankan      html  css  js  c++  java
  • 【SpringBoot】09 日志集成

    原来日志还分抽象层和实现层。。。

    抽象层被称为是日志门面,实现层被称为是日志实现

    门面的有:

    - JCL【Jakarta Commons Logging】    远古门面

    - SLF4J【Simple Logging Facade For Java】

    - Jboss - Logging  使用场景特殊

    实现有:

    - LOG4J  性能问题

    - LOG4J2

    - JUL【java.util.logging】 官方日志,性能一般

    - Logback  对LOG4J的升级,为了满足更多的日志框架,又编写了SLF4J

    选一个门面和一个实现共同完成SpringBoot的日志功能

    SpringBoot 底层的Spring框架,Spring框架默认使用JCL日志门面

    【可是我的SSM明明还是写的SFL4J实现。。。】

    在SpringBoot这里选用了SFL4J + Logback


    如何使用?

    日志记录的方法调用,不应该直接调用日志实现类,而是调用抽象层的方法

    SLF4J官方文档说明:

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

    - 导入SLF4J的日志资源

    - 调用日志工厂的方法获取实例【这一步我怎么在SSM使用日志就有过。。。】

    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 是一个抽象的API,需要其他具体日志实现依赖完成

    对就是这样,当时SSM整合使用了LOG4J,结果还说这个日志加载失败

    翻博客说需要一个整合jar包 就是这个 SLF4J + Log412的依赖,然后其他和LOG4J的操作一样

    官方说这个依赖是 Apdaptation Layer 适配层

    作者当时写LOG4J的时候,没想到要上升抽象层面,SLF4J是LOG4J的后面完成的

    【兼容性的补充把这算。。。】


    遗留问题:

    当前系统使用A日志组合

    Spring使用B日志组合

    Hibernate使用C日志组合

    Mybatis又使用D日志组合

    面对鱼龙混杂的日志,如何做到大一统???

    官方给出的遗留API

    SLF4J作者采用了一种办法:

    给这些不同的日志组合使用覆盖包

    覆盖包:

    - Commons logging API 【jci-over-slf4j.jar】

    - LOG4J API 【log4j-over-slf4j.jar】

    - java.util.logging 【jui-to-slf4j.jar】

    这些包能使所属的框架不会报错,并统一转让SL4J为统一的API

    统一的过程:

    1、从系统中排除其他日志框架

    2、使用这个中间包替换原有的日志框架

    3、导入SFL4J & 实现

    这些图示已经很明白的告诉了我们

    要使用实现就跟我们上面的 门面 + 实现一样简单,

    如果集成的其他框架采用的别的日志实现,使用SLF4J的覆盖包接管即可


    SpringBoot日志关系:

    我们居然可以对pom.xml查看依赖关系UML图

    这可真复杂。。。

    这个是SpringBoot的组成部分

    1、底层也是SLF4J + Logback 实现日志记录

    2、SpringBoot把其他的日志都替换成了SLF4J

    3、中间的替换包


    使用:

    设置日志级别,logging.level.指定具体包名,或者是root或者其他

    在使用lombok时,可以 @SLF4J注解在使用的类上面,可直接使用实例log进行调用

    指定输出文件和路径:

    只规定名称,日志输出在本工程目录中

    那么我们试试不用路径,直接把路径写在文件名称中

    C盘并没有输出文件哦,【过时参数 logging.file是可以这样设置的】

    启用Path参数测试

    并不能输出到C盘中

    这个允许使用工程内目录

    自定义输出格式

    # 自定义控制台输出格式
    # logging.pattern.console = 
    
    # 自定义文件输出格式
    # logging.pattern.file =

    查看Boot默认的参数配置

    详细见:

    https://www.bilibili.com/video/BV1gW411W76m?t=190&p=26

    https://www.bilibili.com/video/BV1gW411W76m?t=190&p=27


  • 相关阅读:
    jquery保存用户名和密码到cookie里面
    avalon框架
    mybatis分页插件
    获取前台查询条件的公用方法
    mybatis分页插件
    maven出错The folder is already a source folder
    Jquery图片上传预览效果
    springMVC文件上传
    自动将String类型的XML解析成实体类
    JavaScript 引擎
  • 原文地址:https://www.cnblogs.com/mindzone/p/12856074.html
Copyright © 2011-2022 走看看