1.SLF4J简单介绍
SLF4J( Simple Logging Facade For Java),即 简单日志门面,为Java 日志访问提供一套标准的 API 框架和接口,具体可以交由其他日志框架实现。
2.SLF4J与其他日志框架间关系
3.日志集成
- 日志框架的出现顺序为 :
log4j → JUL → JCL → SLF4J → logback → log4j2 - simple 是 SLF4J 提供的简单实现框架,需要导入日志实现依赖,自动绑定到 SLF4J上。
- 如果没有绑定任何日志实现框架,则不能实现任何日志记录功能(默认执行nop)。
- logback 出现在 SLF4J 之后,其 API 遵循 SLF4J 进行设计,只需导入日志实现依赖,自动绑定到 SLF4J上。
- JUL、Log4j、reload4j 出现在 SLF4J 之前,其 API 不遵循 SLF4J 进行设计,需要通过适配桥接完成的与 SLF4J 的集成。
4.日志框架与其对应SLF4J适配(关键)
| 日志框架名称 | 日志框架Jar包 | 对应SLF4J中适配Jar包 |
|---|---|---|
| slf4j-simple | slf4j-simple.jar | 无需适配(SLF4J原生实现) |
| nop | 无需导入 | 无需适配 |
| logback | logback-classic.jar(无需导入logback-core.jar,前者已包含) | 无需适配(logback原生支持SLF4J) |
| JUL(java.util.logging) | 无需导入(jdk原生自带) | slf4j-jdk14.jar |
| Log4j | log4j.jar | slf4j-log4j12.jar |
| reload4j | 无需导入reload4j.jar(适配器已包含) | slf4j-reload4j.jar |
| ... | ... | ... |
5.SLF4J集成以上日志框架(案例测试)
(1)slf4j-simple
Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)
<dependencies>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- slf4j核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
<!-- slf4j-simple,SLF4J自带的日志框架,无需适配器-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
测试类代码
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class test {
@Test
public void test1(){
// 实现自带的简单日志实现框架(slf4j-simple)
Logger logger = LoggerFactory.getLogger(test.class);
logger.trace("trace 追踪信息");
logger.debug("debug 详细信息");
logger.info("info 关键信息");
logger.warn("warn 警告信息");
logger.error("error 错误信息");
}
}
测试结果
(2)nop
Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)
<dependencies>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- slf4j核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
测试类代码
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class test {
@Test
public void test1(){
// 没有实现其它日志框架,也没有使用自带的简单日志实现框架(slf4j-simple)
Logger logger = LoggerFactory.getLogger(test.class);
logger.trace("trace 追踪信息");
logger.debug("debug 详细信息");
logger.info("info 关键信息");
logger.warn("warn 警告信息");
logger.error("error 错误信息");
}
}
测试结果
(3)logback
Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)
<dependencies>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- slf4j核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
<!-- logback-classic日志框架实现,无需适配器-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.6</version>
</dependency>
</dependencies>
测试类代码
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class test {
@Test
public void test1(){
// 实现logback-classic日志框架
Logger logger = LoggerFactory.getLogger(test.class);
logger.trace("trace 追踪信息");
logger.debug("debug 详细信息");
logger.info("info 关键信息");
logger.warn("warn 警告信息");
logger.error("error 错误信息");
}
}
测试结果
(4)JUL(java.util.logging)
Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)
<dependencies>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- slf4j核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
<!-- jul适配器,无需导入日志框架,jdk自带-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
测试类代码
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class test {
@Test
public void test1(){
// 实现JUL(java.util.logging)日志框架
Logger logger = LoggerFactory.getLogger(test.class);
logger.trace("trace 追踪信息");
logger.debug("debug 详细信息");
logger.info("info 关键信息");
logger.warn("warn 警告信息");
logger.error("error 错误信息");
}
}
测试结果
(5)Log4j
Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)
<dependencies>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- slf4j核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
<!-- log4j 日志框架,需要添加log4j.properties配置文件才能输出-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- log4j适配器-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.9</version>
</dependency>
<dependencies>
在 resources 中新建 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] %m%n
测试类代码
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class test {
@Test
public void test1(){
// 实现Log4j日志框架
Logger logger = LoggerFactory.getLogger(test.class);
logger.trace("trace 追踪信息");
logger.debug("debug 详细信息");
logger.info("info 关键信息");
logger.warn("warn 警告信息");
logger.error("error 错误信息");
}
}
测试结果
(6)reload4j
Maven项目的pom.xml中导入所需依赖(每次修改后记得刷新重载)
<dependencies>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- slf4j核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
<!-- reload4j适配器,会自动导入reload4j.jar包,需要添加log4j.properties配置文件才能输出-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
测试类代码
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class test {
@Test
public void test1(){
// 实现reload4j日志框架
Logger logger = LoggerFactory.getLogger(test.class);
logger.trace("trace 追踪信息");
logger.debug("debug 详细信息");
logger.info("info 关键信息");
logger.warn("warn 警告信息");
logger.error("error 错误信息");
}
}
测试结果