java的日志门面技术slf4j

java的日志门面技术slf4j

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

​ 官方网站: https://www.slf4j.org/

​ SLF4J是目前市面上最流行的日志门面。现在的项目中,基本上都是使用SLF4J作为我们的日志系统。SLF4J日志门面主要提供两大功能:

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

1.快速入门

  1. 导入依赖

            <!--slf4j 门面-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.26</version>
            </dependency>
            <!--slf4j内置的简单实现-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>1.7.21</version>
            </dependency>
    
  2. 程序

    package com.hncj.log.slf4j;
    
    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class Slf4jStudy {
        public static final Logger LOGGER= LoggerFactory.getLogger(Slf4jStudy.class);
        @Test
        public void test1(){
            LOGGER.error("error级别的日志");
            LOGGER.warn("warning级别的日志");
            LOGGER.info("info级别的日志");
            LOGGER.debug("debug 中文"); // 调试信息,一般在开发阶段使用,记录程序的变量、参 数等
            LOGGER.trace("trace 中文"); // 追踪信息,记录程序的所有流程信息
    
            //使用占位符输出日志
            String username="wangshanhe";
            int age=24;
            LOGGER.info("用户:{},年龄{}",username,age);
    
            //将系统异常信息输出
            try {
                int i=1/0;
            } catch (Exception e) {
                LOGGER.warn("出现异常:{}",e.toString());
            }
        }
    }
    

在这里插入图片描述

2.绑定日志的实现(Binding)

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

在这里插入图片描述

  1. slf4j日志门面绑定logback

    <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.26</version>
     </dependency>
     <dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-classic</artifactId>
          <version>1.2.3</version>
     </dependency>
    
  2. slf4j日志门面设置日志开关(导入坐标关闭日志功能)

    <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.26</version>
     </dependency>
     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-nop</artifactId>
          <version>1.7.25</version>
     </dependency>
    
  3. slf4j日志门面绑定log4j

    <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.26</version>
     </dependency>
    <!--导入log4j适配器-->
     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
         <version>1.7.12</version>
     </dependency>
     <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.17</version>
     </dependency>
    
    # 指定 RootLogger 顶级元素默认配置信息(日志级别,输出位置)
    # 指定日志级别=trace,使用的 appender 为=console
    log4j.rootLogger = trace,console
    
    # 指定控制台日志输出的 appender
    log4j.appender.console = org.apache.log4j.ConsoleAppender
    log4j.appender.console.encoding=UTF-8
    # 指定消息格式 layout
    #log4j.appender.console.layout = org.apache.log4j.SimpleLayout
    #log4j.appender.console.layout = org.apache.log4j.HTMLLayout
    #log4j.appender.console.layout = org.apache.log4j.xml.XMLLayout
    # 自定义layout
    log4j.appender.console.layout = org.apache.log4j.PatternLayout
    # 指定消息格式的内容
    log4j.appender.console.layout.conversionPattern = [%%p]-->[%-6p]    [%%p]-->[%6p]   [%%p]-->[%.4p]      [%%p]-->[%-6.5p]    [%%r]-->[%r]    [%%c]-->[%c]    [%%t]-->[%t]    [%%d]-->[%d{yyyy-MM-dd HH:mm:ss:SS}]    [%%l]-->[%l]    [%%F]-->[%F]    [%%L]-->[%L]    [%%%%]-->[%%]    [%%m]==%m   %n
    
    
  4. 日志门面绑定jul日志框架

     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.26</version>
     </dependency>
    <!--导入jul适配器-->
     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-jdk14</artifactId>
         <version>1.7.25</version>
     </dependency>
    
    

3.slf4j日志桥接器

在这里插入图片描述

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

    • 先去除之前老的日志框架的依赖
    • 添加SLF4J提供的桥接组件
    • 为项目添加SLF4J的具体实现
  2. 迁移的方式:
    如果我们要使用SLF4J的桥接器,替换原有的日志框架,那么我们需要做的第一件事情,就是删除掉原有项目中的日志框架的依赖。然后替换成SLF4J提供的桥接器。

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

    • log4j-over-slf4j.jar和slf4j-log4j12.jar不能同时出现
    • jul-to-slf4j.jar和slf4j-jdk14.jar不能同时出现
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值