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.快速入门
-
导入依赖
<!--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>
-
程序
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有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)
-
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>
-
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>
-
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
-
日志门面绑定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日志桥接器
-
桥接解决的是项目中日志的遗留问题,当系统中存在之前的日志API,可以通过桥接转换到slf4j的实现
- 先去除之前老的日志框架的依赖
- 添加SLF4J提供的桥接组件
- 为项目添加SLF4J的具体实现
-
迁移的方式:
如果我们要使用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>
-
注意问题:
- log4j-over-slf4j.jar和slf4j-log4j12.jar不能同时出现
- jul-to-slf4j.jar和slf4j-jdk14.jar不能同时出现
版权声明:本文为m0_51491702原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。