Java日志框架体系
Java的日志框架有很多,常用的有log4j1.x
,log4j2.x
,logback
,jul
,jcl
等等,这些框架如何使用?他们如何与slf4j-api
搭配使用?不搭配slf4j-api
能否单独使用?使用过程中需要注意哪些事项?
实际开发中我们也会遇到很多问题,本篇文章就是为了讲解下Java的日志体系。
我会尽可能的讲解清楚,如有问题,欢迎指正!!!
日志体系图
下图是SlF4j日志的体系图。
理解了上图,其实就理解了Slf4j日志框架的体系。
查看上图时,特别注意颜色的区分,不同颜色有不同的说明,接下来我具体讲解下。
:代表的应用,这没有什么可说的。
:代表的是Slf4j Api(slf4j-api.jar),这个jar是日志框架的门面,里面是对日志的抽象(接口),它将暴漏给应用来使用。
:这些日志的实现(provider),是直接实现slf4j-api.jar相关接口实现的。
:代表适配层,是因为有些日志的实现(provider)并没有直接使用
slf4j-api
而是有自己的接口,此时就需要使用适配将其和slf4j-api
打通。
:没有原生实现
sfl4j-api
的日志框架,这些框架需要使用适配层与`sfl4j-api
接口适配。
纵向看,每个application都对应一种实现方式。接下来一一来说明下具体实现方式。
说明
本文使用的sfl4j-api版本是2.0.6版本,JDK是17
未绑定实现
未绑定实现肯定是不能使用的,也就是说只有slf4j-api
的接口定义,没有具体地实现。
示例项目:slf4j-unbound
依赖说明
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itlab1024.log</groupId>
<artifactId>slf4j-unbound</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
</project>
只引入了slf4j-api
!
测试类
package com.itlab1024.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class com.itlab1024.log.Main {
public static final Logger logger = LoggerFactory.getLogger(com.itlab1024.log.Main.class);
public static void main(String[] args) {
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
运行结果
日志并没有正常输出,从红色文字提示可知道,没有提供Slf4j的实现框架(provider)。
绑定logback实现
通常使用logback只需要引入logback-classic
即可,它内部的pom依赖了sfl4j-api
和logback-core
,会自动下载下来响应的依赖。
依赖说明
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">