文章目录

  • 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 日志门面相关推荐

  1. Java日志框架 -- SLF4J日志门面(入门案例、SLF4J优点、SLF4J日志绑定、SL4J桥接旧的日志框架)

    1. SLF4J日志门面 JCL日志门面逐渐被淘汰了,因为他无法动态的扩展具体的日志实现框架. 简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Ja ...

  2. Log4j2日志框架集成Slf4j日志门面

    1.说明 本文介绍使用日志门面Slf4j打印日志, 底层日志实现使用Log4j2框架, 方便以后切换底层日志实现, Log4j2可以替换成Logback等. 2.依赖管理 在pom.xml依赖管理中导 ...

  3. 学习Java日志框架之——搞懂日志门面(JCL+SLF4J)

    文章目录 系列文章目录 一.什么是日志门面 1.门面模式(外观模式) 2.日志门面 二.了解JCL 1.JCL组件结构 2.JCL案例 (1)JCL默认实现 (2)导入log4j测试原有程序 三.SL ...

  4. 日志门面框架Slf4j

    SLF4J的使用 简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准.规范 的API框架,其主要意义在于提供接口,具体的实 ...

  5. Java日志门面技术 SLF4J

    文章目录 背景 SLF4J概述 切换日志框架 实际应用 配合自身简单日志实现(slf4j-simple) 配置logback日志实现 配置Log4J日志实现(需适配器) 配置JUL日志实现(需适配器) ...

  6. 日志框架(3) : 日志门面、JCL介绍、SLF4J介绍

    文章目录 日志门面 日志门面概述 门面模式(外观模式) 日志门面 常见的日志框架及日志门面 JCL简介 SLF4J SLF4J简介 SLF4J桥接技术 SLF4J特点 SLF4J集成日志实现(jul, ...

  7. 日志门面和日志框架(日志实现框架log4j2)

    一.log4j2简介 Apache Log4j 2是对Log4j的升级,是最优秀的java日志框架. 二.log4j2特征 性能提升:Log4j2包含基于LMAX Disruptor库的下一代异步记录 ...

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

    日志 概述 日志文件是用于记录系统操作时间的文件集合.可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 调试日志 开发中使用日志能够更加灵活和方便的去重现开发中 ...

  9. slf4j导入那个依赖_学习SPRINGBOOT结合日志门面SLF4J和日志实现LOGBACK的混合使用

    一.此处主要介绍在springboot工程下如何使用 logback + slf4j 进行日志记录. logback主要包含三个组成部分:Loggers(日志记录器).Appenders(输出目的在) ...

最新文章

  1. opencv-python 使用掩模抠图
  2. Google人体图像分割模型Bodypix再次更新,针对Coral开发板优化,720p/30fps流畅运行...
  3. Matlab读取avi视频并播放
  4. 拼字符串成为时间,和两个计算时间点的中间值
  5. enterFrame是什么意思?
  6. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
  7. Java volatile关键字
  8. python实例化次数怎么算_关于python多次实例化
  9. AOP实践—ASP.NET MVC5 使用Filter过滤Action参数防止sql注入,让你代码安全简洁
  10. mysql建立聚族索引语句,MySQL学习教程之聚簇索引
  11. 解决EXSi6.0没有WEB Client的问题
  12. :Java+MySQL基于ssm的餐厅饭店前台点菜订餐系统vue
  13. 多年测试经验分享:上市公司怎么进行安全测试
  14. Qt编写自定义控件54-时钟仪表盘
  15. 论文阅读笔记--Federated Continual Learning with Weighted Inter-client Transfer
  16. java串口rxtx下载_WINDOWS环境下JAVA串口RXTX编程DEMO
  17. Linux刻录光盘win10认不到,Win10不能读取DVD光驱和刻录光盘解决方法
  18. MDF,LDF格式文件还原数据库
  19. 体验版的软件可以取消“导出”功能限制吗?
  20. 花 40 块搞个游戏机「GitHub 热点速览 v.22.27」

热门文章

  1. mysql批量删除多条记录的sql语句_一次删除多条记录的sql语句
  2. HTML 自适应方案
  3. 再谈Linux磁盘扩容(pvresize直接扩容PV)
  4. html创建关联程序,Win10系统如何在默认程序控制面板中创建关联
  5. 阿里开发规范【转载】
  6. SQL server 常用的数据库 DDL语言
  7. 监狱难题 位运算和超立方体染色
  8. 创建基于Webpack的Vue.js项目
  9. 微信小程序地图开发入门(一)
  10. 关于反向传播算法的理解