• Java日志系列——日志门面,阿里日志规约,SLF4J


    日志门面

    系统架构复杂后产生的问题

    当我们的系统变的复杂的之后,难免会集成其他的系统,不同的系统之间可能会使用不同的日志系统。在一个系统中,我们的日志框架可能会出现多个,会出现混乱,而且随着时间的发展,可能会出现新的效率更高的日志系统,如果我们想切换代价会非常的大。如果我们的日志系统能和jdbc一样,有一套自己的规范,其他实现均按照规范去实现,就能很灵活的使用日志框架了。

    为什么需要日志门面

    日志门面就是为了解决这个问题而出现的一种技术,日志门面是规范,其他的实现按照规范实现各自的日志框架即可,我们程序员基于日志门面编程即可。

    常见的日志门面:

    1. JCL
    2. slf4j

    常见的日志实现:

    1. JUL
    2. log4j
    3. logback
    4. log4j2

    当前最流行的就是logback和log4j2

    阿里日志规约

    1. 应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API。使用门面模式的日志框架,有利于维护和各个类的日志处理方法统一。
    2. 日志文件推荐至少保存15天,因为有些异常具备以"周"为频次发生的特点。
    3. 应用中的扩展日志(如打点、临时监控、访问日志等)命名方式: appName_logType_logName.log。logType为日志类型,推荐分类有stats/monitor/visit等;
    4. logName为日志描述。这种命名的好处:通过文件名就可以知道日志文件属于哪个应用,哪种类型,有什么目的,这也有利于归类查找。
    5. 对trace/debug/info级别的日志输出,必须使用条件输出形式或者占位符的方式。
    6. 避免重复打印日志,否则会浪费磁盘空间。务必在日志配置文件中设置additivity=false。
    7. 异常信息应该包括两类:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字向上抛出。
    8. 谨慎地记录日志。生产环境禁止输出debug日志;有选择地输出info日志;如果使用warn记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免吧服务器磁盘撑爆,并及时删除这些观察日志。
    9. 可以使用warn日志级别记录用户输入参数错误的情况,避免当用户投诉时无所适从。

    规约下载

    如果大家需要请私信我,免费给大家(泰山版2020),请大家以学习为目的,不要拿去复印,上传网上赚钱

    SLF4J

    简单日志门面(Simple Logging Facade For Java)SLF4)主要是为了给Java日志访问提供一套标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。当然sf4j自己也提供了功能较为简单的实现,但是一般很少用到。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架(log4j、 logback等),中间使用桥接器完成桥接。

    目前市面上最流行的就是他了

    官网地址

    https://www.slf4j.org/

    两大功能

    1. 日志框架绑定
    2. 日志框架桥接

    QuickStart

    1.引入依赖

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4

    2.通过工厂获取对象

     final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
    
    • 1

    3.实现

        @Test
        void test(){
            final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
            logger.error("error");
            logger.warn("warn");
            logger.info("info");
            logger.debug("debug");
            logger.trace("trace");
            //占位符输出方式
            logger.warn("{}first,{}second","zhangsan",18);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    绑定其他日志实现

    SLF4]支持各种日志框架。SLF4J发行版附带了几个称为SLF4J绑定的jar文件,每个绑定对应一个受支持的框架。

    绑定步骤

    1. 添加slf4j-api的依赖
    2. 使用slf4j的API在项目中进行统一的日志记录
    3. 绑定具体的日志实现框架
      3.1. 绑定已经实现了slf4j的日志框架,直接添加对应依赖
      3.2. 绑定没有实现slf4j的日志框架,先添加日志的适配器,再添加实现类的依赖
    4. slf4j有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)

    日志框架桥接

    通常,您依赖的某些组件依赖于SLF4J以外的日志记录API。您也可以假设这些组件在不久的将来不会切换到SLF4J。为了解决这种情况,SLF4J附带了几个桥接模块,这些模块将对log4j,JCL和java.utillogging APl的调用重定向,就好像它们是对SLF4J的API一样。

    原始使用log4j的api写代码,但是具体的实现给你抽离了,我们依赖了一个中间层,这个层其实是用旧的api操作slf4j,而不是操作具体的实现。

    桥接解决的是项目中日志的遗留问题,当系统中存在之前的日志API,可以通过桥接转换到slf4j的实现

    1. 先去除之前老的日志框架的依赖,必须去掉。
    2. 添加SLF4J提供的桥接组件,这个组件就是模仿之前老的日志写了一套相同的api,只不过这个api是在调用slf4j的api。
    3. 为项目添加SLF4J的具体实现。
  • 相关阅读:
    yolov8_track追踪加分割(yolo目标检测+追踪+分割)
    Oracle课程-深入学习文档
    java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化
    QEMU热迁移中的VHOST-USER-NVME连接问题
    【图像处理OpenCV(C++版)】——初学OpenCV
    流程图 and/or/xor 讲解
    分布式开源存储架构Ceph概述
    JSP中的cookie对象和Date时间类
    JavaWeb
    典型的DOS攻击技术
  • 原文地址:https://blog.csdn.net/qq_51553982/article/details/126635368