Java日志门面框架--SLF4J
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
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13