SLF4J 日志门面
文章目录
- 01、简单介绍
- 02、日志级别
- 03、入门案例
- 03、动态打印
- 04、异常打印
- 05、日志集成
- 06、集成 logback
- 07、集成 slf4j-nop
- 08、集成 log4j
- 09、集成 jul
01、简单介绍
官方网址:https://www.slf4j.org/
SLF4J( Simple Logging Facade For Java),即 简单日志门面。主要是为了给 Java 日志访问提供一套标准、规范的 API 框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如 Log4j 或 Logback 等。
SLF4J 自身也提供了功能较为简单的实现,但是一般很少用到。对于一般的 Java 项目而言,日志框架会选择 slf4j-api 作为门面,配上具体的实现框架,中间使用桥接器完成桥接。所以 SLF4J 最重要的两个功能就是对于日志框架的绑定以及日志框架的桥接。
02、日志级别
级别 | 描述 |
---|---|
trace | 日志追踪信息 |
debug | 日志详细信息 |
info(默认) | 日志关键信息 |
warn | 日志警告信息 |
error | 日志错误信息 |
03、入门案例
导入依赖:
<dependencies><!-- slf4j核心依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><!-- slf4j自带的简单日志实现 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.25</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
</dependencies>
代码示例:
package com.slf4j;import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Slf4jTest {@Testpublic void test01(){// 没有集成其它日志实现框架的话,使用自带的简单日志实现框架(slf4j-simple)Logger logger = LoggerFactory.getLogger(Slf4jTest.class);logger.trace("trace追踪信息");logger.debug("debug详细信息");logger.info("info关键信息");logger.warn("warn警告信息");logger.error("error错误信息");}
}
运行结果:
[main] INFO com.slf4j.Slf4jTest - info关键信息
[main] WARN com.slf4j.Slf4jTest - warn警告信息
[main] ERROR com.slf4j.Slf4jTest - error错误信息
03、动态打印
代码示例:
@Test
public void test02() {Logger logger = LoggerFactory.getLogger(Slf4jTest.class);String name = "张三";int age = 23;// 字符串拼接,麻烦、可读性差//logger.info("学生信息:姓名-" + name + ";年龄-" + age + "");// 动态信息打印,使用占位符的形式来代替字符串的拼接logger.info("学生信息:姓名-{};年龄-{}", name, age);
}
运行结果:
[main] INFO com.slf4j.Slf4jTest - 学生信息:姓名-张三;年龄-23
04、异常打印
代码示例:
@Test
public void test03() {Logger logger = LoggerFactory.getLogger(Slf4jTest.class);try {Class.forName("User");} catch (ClassNotFoundException e) {logger.info("异常信息:", e);}
}
运行结果:
[main] INFO com.slf4j.Slf4jTest - 异常信息:
java.lang.ClassNotFoundException: Userat java.net.URLClassLoader.findClass(URLClassLoader.java:382)at java.lang.ClassLoader.loadClass(ClassLoader.java:418)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)at java.lang.ClassLoader.loadClass(ClassLoader.java:351)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at com.slf4j.Slf4jTest.test03(Slf4jTest.java:34)...
05、日志集成
SLF4J 日志门面共有三种情况对日志实现进行绑定。
在没有绑定任何日志实现框架的基础上,日志不能实现任何功能。slf4j-simple 是 SLF4J 官方提供的简单实现,也需要导入依赖,自动绑定到 SLF4J 日志门面上。
Logback 和 Simple(包括 nop) 是 SLF4 出现后提供的日志实现框架,所以 API 完全遵循 SLF4J 进行设计。只需要导入对应的日志实现依赖,即可与 SLF4J 无缝衔接。nop 虽然也划分到实现中,但它是指不实现日志记录。
Log4j 和 JUL 是 SLF4J 出现前就已经存在的日志实现框架,所以 API 不遵循 SLF4J 进行设计。需要通过适配桥接的技术,完成的与 SLF4J 的衔接。
注意: 在 SLF4J 环境下,若同时导入多个日志实现框架,默认使用先导入的。在实际应用中,一般只集成一种日志实现。
06、集成 logback
导入依赖: 注释 slf4j-simple 依赖。
<!-- logback日志框架 -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>
代码示例:
@Test
public void test01() {Logger logger = LoggerFactory.getLogger(Slf4jTest.class);logger.trace("trace追踪信息");logger.debug("debug详细信息");logger.info("info关键信息");logger.warn("warn警告信息");logger.error("error错误信息");
}
运行结果:
12:26:18.489 [main] DEBUG com.slf4j.Slf4jTest - debug详细信息
12:26:18.492 [main] INFO com.slf4j.Slf4jTest - info关键信息
12:26:18.492 [main] WARN com.slf4j.Slf4jTest - warn警告信息
12:26:18.492 [main] ERROR com.slf4j.Slf4jTest - error错误信息
07、集成 slf4j-nop
导入依赖: 注释 logback 依赖。
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.25</version>
</dependency>
代码示例:
@Test
public void test01() {Logger logger = LoggerFactory.getLogger(Slf4jTest.class);logger.trace("trace追踪信息");logger.debug("debug详细信息");logger.info("info关键信息");logger.warn("warn警告信息");logger.error("error错误信息");
}
运行结果: 可以看到没有日志输出,其主要作用是禁止日志打印。
08、集成 log4j
导入依赖: 注释 slf4j-nop 依赖。
<!-- log4j日志框架 -->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
代码示例:
@Test
public void test01() {Logger logger = LoggerFactory.getLogger(Slf4jTest.class);logger.trace("trace追踪信息");logger.debug("debug详细信息");logger.info("info关键信息");logger.warn("warn警告信息");logger.error("error错误信息");
}
运行结果: 报错了。
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
因为 Log4j 是 SLF4J 出现前就已经存在的日志实现框架,所以 API 不遵循 SLF4J 进行设计。需要通过适配桥接的技术来完成的与 SLF4J 的衔接。
导入依赖:
<!-- log4j适配器 -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version>
</dependency>
再次运行: 虽然日志信息没有打印出来,但根据警告信息可看出使用了 Log4j 日志框架。
log4j:WARN No appenders could be found for logger (com.slf4j.Slf4jTest).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
创建配置: log4j.properties 文件。
#配置日志级别,输出器
log4j.rootLogger=INFO,console
#配置控制台输出器
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置自定义格式器
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#配置自定义转换模式
log4j.appender.console.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5p] [%t] [%-4rms] [%c#%M-%L] %m%n
再次运行:
[2022-07-01 12:44:21.977] [INFO ] [main] [0 ms] [com.slf4j.Slf4jTest#test01-14] info关键信息
[2022-07-01 12:44:21.979] [WARN ] [main] [2 ms] [com.slf4j.Slf4jTest#test01-15] warn警告信息
[2022-07-01 12:44:21.979] [ERROR] [main] [2 ms] [com.slf4j.Slf4jTest#test01-16] error错误信息
09、集成 jul
因为 JUL 日志框架是 JDK 内置的工具包,无需导入依赖。JUL 是 SLF4J 出现前就已经存在的日志实现框架,所以 API 不遵循 SLF4J 进行设计。需要通过适配桥接的技术,完成的与 SLF4J 的衔接。
导入依赖:
<!-- jul适配器 -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.25</version>
</dependency>
代码示例:
@Test
public void test01() {Logger logger = LoggerFactory.getLogger(Slf4jTest.class);logger.trace("trace追踪信息");logger.debug("debug详细信息");logger.info("info关键信息");logger.warn("warn警告信息");logger.error("error错误信息");
}
运行结果:
七月 01, 2022 12:50:56 下午 com.slf4j.Slf4jTest test01
信息: info关键信息
七月 01, 2022 12:50:56 下午 com.slf4j.Slf4jTest test01
警告: warn警告信息
七月 01, 2022 12:50:56 下午 com.slf4j.Slf4jTest test01
严重: error错误信息
SLF4J 日志门面相关推荐
- Java日志框架 -- SLF4J日志门面(入门案例、SLF4J优点、SLF4J日志绑定、SL4J桥接旧的日志框架)
1. SLF4J日志门面 JCL日志门面逐渐被淘汰了,因为他无法动态的扩展具体的日志实现框架. 简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Ja ...
- Log4j2日志框架集成Slf4j日志门面
1.说明 本文介绍使用日志门面Slf4j打印日志, 底层日志实现使用Log4j2框架, 方便以后切换底层日志实现, Log4j2可以替换成Logback等. 2.依赖管理 在pom.xml依赖管理中导 ...
- 学习Java日志框架之——搞懂日志门面(JCL+SLF4J)
文章目录 系列文章目录 一.什么是日志门面 1.门面模式(外观模式) 2.日志门面 二.了解JCL 1.JCL组件结构 2.JCL案例 (1)JCL默认实现 (2)导入log4j测试原有程序 三.SL ...
- 日志门面框架Slf4j
SLF4J的使用 简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准.规范 的API框架,其主要意义在于提供接口,具体的实 ...
- Java日志门面技术 SLF4J
文章目录 背景 SLF4J概述 切换日志框架 实际应用 配合自身简单日志实现(slf4j-simple) 配置logback日志实现 配置Log4J日志实现(需适配器) 配置JUL日志实现(需适配器) ...
- 日志框架(3) : 日志门面、JCL介绍、SLF4J介绍
文章目录 日志门面 日志门面概述 门面模式(外观模式) 日志门面 常见的日志框架及日志门面 JCL简介 SLF4J SLF4J简介 SLF4J桥接技术 SLF4J特点 SLF4J集成日志实现(jul, ...
- 日志门面和日志框架(日志实现框架log4j2)
一.log4j2简介 Apache Log4j 2是对Log4j的升级,是最优秀的java日志框架. 二.log4j2特征 性能提升:Log4j2包含基于LMAX Disruptor库的下一代异步记录 ...
- 日志--门面及实现框架 自用解析
日志 概述 日志文件是用于记录系统操作时间的文件集合.可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 调试日志 开发中使用日志能够更加灵活和方便的去重现开发中 ...
- slf4j导入那个依赖_学习SPRINGBOOT结合日志门面SLF4J和日志实现LOGBACK的混合使用
一.此处主要介绍在springboot工程下如何使用 logback + slf4j 进行日志记录. logback主要包含三个组成部分:Loggers(日志记录器).Appenders(输出目的在) ...
最新文章
- opencv-python 使用掩模抠图
- Google人体图像分割模型Bodypix再次更新,针对Coral开发板优化,720p/30fps流畅运行...
- Matlab读取avi视频并播放
- 拼字符串成为时间,和两个计算时间点的中间值
- enterFrame是什么意思?
- java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
- Java volatile关键字
- python实例化次数怎么算_关于python多次实例化
- AOP实践—ASP.NET MVC5 使用Filter过滤Action参数防止sql注入,让你代码安全简洁
- mysql建立聚族索引语句,MySQL学习教程之聚簇索引
- 解决EXSi6.0没有WEB Client的问题
- :Java+MySQL基于ssm的餐厅饭店前台点菜订餐系统vue
- 多年测试经验分享:上市公司怎么进行安全测试
- Qt编写自定义控件54-时钟仪表盘
- 论文阅读笔记--Federated Continual Learning with Weighted Inter-client Transfer
- java串口rxtx下载_WINDOWS环境下JAVA串口RXTX编程DEMO
- Linux刻录光盘win10认不到,Win10不能读取DVD光驱和刻录光盘解决方法
- MDF,LDF格式文件还原数据库
- 体验版的软件可以取消“导出”功能限制吗?
- 花 40 块搞个游戏机「GitHub 热点速览 v.22.27」