Java Logging 日志框架 SLF4J 的使用(Maven)

17,316 阅读3分钟

下面是 Maven Repository 上热门 Logging 框架的排行榜,SLF4J 的排名是第二名的2倍之多,足见 SLF4J 是一个非常优秀的框架。

来源:mvnrepository.com/open-source…

在正式开始之前,我们需要清楚一个概念:SLF4J 并不是一个真正的 Logging 日志框架。

根据 SLF4J 官网的描述,SLF4J 作为各种日志框架的简单外观或抽象,允许最终用户在部署时插入所需的日志框架(java.util.logging、Logback 或者 Log4j)。

意思就是说,SLF4J 是一个对各种日志框架的封装的库,封装了所有 Logging 需要使用到的 api,SLF4J 在使用的时候只需要绑定要使用的日志框架(java.util.logging、Logback 或 Log4j)即可。

这样的封装,感觉多此一举,直接使用真正的日志框架不就好了?

真的是这样吗?假设有这样一个场景:
一个项目上线多年,因为业务关系,原来使用的日志框架已经无法满足新的业务场景,需要引入公司内部开发的性能强悍的日志框架,这个一个庞大的工作量,万一有地方没有改到,上线了,过了十天半个月才被触发,那就麻烦大了。

但是如果使用了 SLF4J 呢?那么这个工作就很轻松了,只需两步即可替换SLF4J 绑定的日志框架。香不香?


下面开始 SLF4J 的使用:
我们先建一个 Maven 测试项目,先确认自己会使用后再集成到项目中。
选中 Maven,点击 Next —— 输入项目名称 —— Finish

注:我这里使用的是 IntelliJ IDEA,其他开发工具也是大同小异,新建一个 Maven 项目即可。

建好 Maven 项目后,就要开始前面说的两步中的第一步

1. 添加依赖

pom.xml 文件中添加依赖: SLF4J 和排名第二的 Logback

注意:

  1. 如果你是在 Maven Repository 获取,请记得把 dependency 节点中的 <scope>test</scope> 删掉。
  2. scope 标签的作用:www.cnblogs.com/Jimc/p/9777…
<dependencies>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>

把依赖添加到 pom.xml 中,点击 Maven 同步按钮,等待底部进度条走完后,pom.xml 中红色部分文字会变黑色,代表依赖添加成功。

注:红色表示本地 Maven 缓存没有该依赖库,需要从 Maven 服务器拉取。

添加依赖之后,SLF4J 就已经自动绑定好 Logback 了。
新建测试类 SLF4JTest

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JTest {

    private static final String TAG = "TAG";

    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(TAG);

        logger.trace("test_trace");
        logger.debug("test_debug");
        logger.info("test_info");
        logger.warn("test_warn");
        logger.error("test_error");
    }
}

写好代码,右键点击 Run 'SLF4JTest.main()'

我们发现没有打印出 trace 日志,这是因为 logback 默认的最低打印级别是:debug
现在要进行第二步了:

2. 编写 logback 配置文件

resources 中新建 logback.xml

注:Logback 日志框架的配置文件名称为:logback.xml

<configuration>
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/test.log</file>
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="TRACE">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

好了,我们看到 trace 级别的日志已经可以打印出来了,日志文件也已经生成了。
SLF4J 的使用就到这里结束了。

Logback 的配置文件还有一些高级的用法,可以看一下这两篇,难度适中

Logback 配置详解 & 原理介绍blog.csdn.net/u013332124/…
Logback 官方手册 - Chapter 4: Appenderslogback.qos.ch/manual/appe…