日志--门面及实现框架 自用解析

本文详细介绍了Java日志框架,包括日志的重要性和分类,如事件日志和消息日志。重点讨论了SLF4J日志门面,解释了其依赖、绑定日志实现、桥接旧日志框架的原理,以及logback和Log4j2的特性、配置和性能优势。Logback作为log4j的改良版,而Log4j2则在性能和异常处理方面有所提升,提供了异步日志功能。
摘要由CSDN通过智能技术生成

日志

概述

日志文件是用于记录系统操作时间的文件集合。可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。

  1. 调试日志

    开发中使用日志能够更加灵活和方便的去重现开发中的的bug问题。

  2. 系统日志

    系统日志是记录系统中硬件、软件和系统问题的信息,还可以监视系统中发生的事件。可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。

java日志框架

日志门面 : JCL 、 slf4j

日志实现 : JUL 、 logback 、 log4j 、 log4j2

日志门面

借鉴于JDBC的思想,为日志系统提供一套门面,可以面向这些接口规范进行开发,避免直接依赖具体的日志框架。

用户通过控制日志门面提供的日志接口实现具体日志框架技术


SLF4J

1. 依赖

    <!-- slf4j-core 使用slf4j门面核心 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.5</version>
    </dependency>
    <!-- slf4j 自带的简单日志实现 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.30</version>
    </dependency>

2. 测试代码

    public class slf4jTest {
        public final static Logger LOGGER = LogerFactory.getLogger(slf4jTest.class);

        @Test
        public void test() throws Exception {
            LOGGER.error("error");
            LOGGER.warn("warn");
            LOGGER.info("info");
            LOGGER.debug("debug");
            LOGGER.trace("trace");
            //使用占位符输出日志 
            String name=cccq;
            Integer age=18;
            LOGGER.info("User:{},{}",name,age);
        }
    }

3. 绑定日志的实现

SLF4J附带几个SLF4J绑定的jar文件,每个绑定对应一个受支持的框架

  1. 绑定流程
    1. 添加slf4j-api的依赖
    2. 使用slf4j的API在项目中进行统一的日志记录
    3. 绑定具体的日志实现框架
      1. 绑定已经实现了slf4j的日志框架,直接添加对应依赖
      2. 绑定没有实现slf4j的日志框架,先添加日志的适配器,再添加实现类的依赖

slf4j有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)

  1. 依赖

    <<!-- slf4j-core 使用slf4j门面核心 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.5</version>
    </dependency>
    
    <!-- log4j -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.30</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    
    <!-- jul -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.5.6</version>
    </dependency>
    
    <!-- jcl -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jcl</artifactId>
      <version>1.7.30</version>
    </dependency>
    
    <!-- 不使用日志实现 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-nop</artifactId>
      <version>1.7.30</version>
    </dependency>
    

要切换日志框架,只需替换类路径上的slf4j绑定。 例:从java.util.logging切换到log4j,只需将依赖 slf4j-jdk14 改为 slf4j-log4j12

4. 桥接旧的日志框架

从旧的其他日志实现升级到使用slf4j日志门面,slf4j附带了几个桥接模块,这些模块将对log4j,JCL和java.util.logging的调用重定向,就好像他们是对SLF4J一样

  1. 步骤 :

    1. 去除之前老的日志框架的依赖
    2. 添加SLF4J提供的桥接组件
    3. 为项目添加SLF4J的具体实现
  2. 依赖

    <!-- log4j -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>log4j-over-slf4j</artifactId>
      <version>1.7.30</version>
    </dependency>
    
    <!-- jul -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>1.5.6</version>
    </dependency>
    
    <!-- jcl -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.7.30</version>
    </dependency>
    
  3. 注意问题:

    1. jcl-over-slf4j 和 slf4j-jcl 不能同时部署,前一个jar将导致jcl将日志系统的选择委托给SLF4J,后一个jar文件将导致SLF4J将日志系统的选择委托给JCL,从而导致死循环
    2. log4j-over-slf4j 和 slf4j-log4j12 不能同时出现
    3. jul-over-slf4j 和 slf4j-jdk14 不能同时出现
    4. 所有的桥接都只对Logger日志记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值