• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java日志门面框架--SLF4J

武飞扬头像
trh_csdn
帮助1

1.日志门面概述

1.1 门面模式(外观模式)

门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。门面模式相当于一个统一的接口,不论外部对象是怎么样的,与子系统通信都是用的统一的接口(门面模式)。

1.2 日志门面

日志框架也需要一个统一的接口,与代码整合,这样切换日志框架的时候就可以不修改代码内容。

1.3 常见的日志框架及日志门面

常见的日志实现:JUL、log4j、logback、log4j2
常见的门面框架:JCL、slf4j
出现顺序:log4j–>JUL–>JCL–>slf4j–>logback–>log4j2

2.SLF4J简介

简单日志门面(Simple Logging Facade For Java)主要是为了给Java日志访问提供了一套标准、规范的API框架,其主要意义在于提供接口。对于一般的项目而言,日志框架会选择SLF4J-API作为门面,配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接。

2.1 案例

maven配置

	<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
    </dependency>
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogDemoCtroller {
    /**
     * slf4j 对应5个日志级别划分
     * trace:日志追踪信息
     * debug:日志详细信息
     * info:日志关键信息
     * warn:日志警告信息
     * error:日志错误信息
     * 没有集成其他日志框架的话,使用的就是自带的slf4j-simple
     * 但是slf4j-simple也是要以依赖的形式导入
     */
    @Test
        public void test() {
           Logger logger = LoggerFactory.getLogger(LogDemoCtroller.class);
           	logger.trace("trace信息");
           	logger.debug("debug信息");
           	logger.info("info信息");
           	logger.warn("warn信息");
            logger.error("error信息");
            //用占位符打印含有变量的信息
            String name = "zs";
        	int age = 23;
        	logger.info("学生信息-姓名:{},年龄:{}",name,age);
        	//打印异常信息
        	 try {
            	Class.forName("aaa");
        	}catch (ClassNotFoundException e){
            	logger.info("具体错误是:" e);
        	}
        }
}
学新通

2.2 SLF4J与日志集成的分类

集成其他日志实现之前
SLF4J日志门面,共有3种情況对日志实现进行绑定
1)官方提供的slf4j-simple,在使用的时候也要导入依赖,进行自动绑定到slf4j-门面上。
如果不导入,slf4j核心依赖是不提供任何实现的。
2)logback和simple (包括nop:表示不记录日志,禁止所有日志的打印)
都是出现slf4j门面之后的日志实现, 所以API完全遵循SLF4J进行的设计,那么我们只需要导入想要使用的日志实现依赖,即可与slf4j无缝衔接。
3)log4j和JUL
都是slf4j门面之前的日志实现,所以不遵循slf4j进行设置,需要通过适配器桥接的技术,完成与日志门面的衔接。下图的Adaption layer即适配器桥接。
学新通

2.3 SLF4J与日志框架集成

2.3.1 SLF4J与logback日志框架集成

1)引入maven依赖

	<dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-classic</artifactId>
         <version>1.2.3</version>
   </dependency>

2)代码

mport org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JTest {
    @Test
    public void test() {
        Logger logger = LoggerFactory.getLogger(SLF4JTest.class);
        logger.trace("trace信息");
        logger.debug("debug信息");
        logger.info("info信息");
        logger.warn("warn信息");
        logger.error("error信息");
    }
}

2.3.2 SLF4J与log4j日志框架集成

1)引入依赖

 		<!--log4j适配器依赖-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!--log4j框架-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

2)代码

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JTest {
    @Test
    public void test() {
        Logger logger = LoggerFactory.getLogger(SLF4JTest.class);
        logger.trace("trace信息");
        logger.debug("debug信息");
        logger.info("info信息");
        logger.warn("warn信息");
        logger.error("error信息");
    }
}

3)log4j配置文件

log4j.rootLogger=trace,console
#配置自定义logger
#log4j.logger.com.tang.project1.test=info,file
##配置appender输出方式 输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
##配置输出的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%x] - %m%n

slf4j要是同时集成了多个日志框架的,哪个maven依赖先导入就集成哪个日志框架
学新通

2.3.3 日志框架的升级—>从log4j到slf4j logback

在不改变源码的情况下升级日志框架,需要使用到桥接器。桥接器的使用步骤为:
1、去除之前旧的日志框架依赖:将pom.xml里引入的log4j框架依赖注释。

 		<!--log4j框架-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

2、添加slf4j相关的桥接组件,桥接器加入后代码编译就不报错了。

 <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>log4j-over-slf4j</artifactId>
     <version>1.7.25</version>
 </dependency>

3.代码:使用桥接器以后,虽然引入的代码看起来还是log4j的,其实是slf4j门面 logback的实现,这就是桥接器的效果。

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.junit.jupiter.api.Test;
public class SLF4JTest {
    @Test
    public void test() {
        Logger logger = LogManager.getLogger(SLF4JTest.class);
        logger.trace("trace信息");
        logger.debug("debug信息");
        logger.info("info信息");
        logger.warn("warn信息");
        logger.error("error信息");
    }
}

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgihcjf
系列文章
更多 icon
同类精品
更多 icon
继续加载