Java日志系统介绍和slf4j的使用

1. 日志系统介绍

日志门面位于应用程序和日志框架之间,日志门面提供一个抽象的能力,日志框架进行具体的日志实现。可以很方便的更换日志框架。类似JDBC驱动

日志门面有:

  • JCL:很古老,apache旗下的,不能兼容其它的日志框架
  • slf4j

日志框架有:

  • JUL:JDK自带的,功能简单,实现JCL
  • log4j:不维护了,实现JCL
  • logback:实现slf4j
  • log4j2:比logback性能好,实现slf4j。虽然也是日志门面,但还是推荐使用slf4j做日志门面,可以方便的切换到logback或其它日志框架

2. slf4j的使用

2.1 slf4j的入门

slf4j(Simple Logging Facade For Java)给Java日志提供一套标准、规范
的API框架,主要提供接口,具体的实现交由其他日志框架。虽然slf4j提供了简单的实现,但很少使用

一般会选择slf4j-api作为门面,再配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接

slf4j主要提供两大功能:

  • 日志框架的绑定
  • 日志框架的桥接

slf4j入门实战

在pom.xml添加依赖

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
        </dependency>

        <!-- slf4j自带的简单日志实现 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.36</version>
        </dependency>
    </dependencies>

示例程序如下:

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

public class Slf4jTest {

    public final static Logger LOGGER = LoggerFactory.getLogger(Slf4jTest.class);

    public static void main(String[] args) {

        // 打印不同级别的日志信息。默认只打印info及以上级别的日志
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info");
        LOGGER.debug("debug");
        LOGGER.trace("trace");

        // 使用占位符输出日志信息
        String name = "bulut";
        Integer age = 18;
        LOGGER.info("姓名:{}, 年龄:{}", name, age);

        // 将系统异常信息写入日志
        try {
            int i = 1 / 0;
        } catch (Exception e) {
            LOGGER.error("出现异常:", e);
        }
    }
}

运行程序,结果如下:

[main] ERROR Slf4jTest - error
[main] WARN Slf4jTest - warn
[main] INFO Slf4jTest - info
[main] INFO Slf4jTest - 姓名:bulut, 年龄:18
[main] ERROR Slf4jTest - 出现异常:
java.lang.ArithmeticException: / by zero
	at Slf4jTest.main(Slf4jTest.java:24)

2.2 slf4j绑定日志框架

slf4j的日志绑定流程:

  1. 添加slf4j-api的依赖
  2. 使用slf4j的API在项目中进行统一的日志记录
  3. 绑定具体的日志框架
    1. 绑定已经实现了slf4j的日志框架, 直接添加其依赖
    2. 绑定没有实现slf4j的日志框架, 先添加日志框架的适配器, 再添加日志框架的依赖
  4. slf4j只能绑定一个日志框架(如果出现多个,默认使用第一个依赖的日志框架)

绑定的日志框架

上面的图片来源slf4j官网manual

具体的绑定情况如下:

  • 如果只添加了slf4j-api,则不打印日志信息
  • Underlying logging framework蓝色部分:
    • logback:只需添加ch.qos.logback:logback-classic:1.2.11(依赖org.slf4j:slf4j-api:1.7.32)依赖即可,会自动依赖logback-core
    • slf4j-simple:只需添加slf4j-simple依赖即可
    • slf4j-nop:添加了该org.slf4j:slf4j-nop:1.7.36依赖,不会打印日志信息
  • Adaptation layer灰色部分:
    • reload4j(log4j):先添加适配器org.slf4j:slf4j-reload4j:1.7.36(依赖ch.qos.reload4j:reload4j:1.2.19)依赖,再添加ch.qos.reload4j:reload4j:1.2.21依赖。需要添加appenders到resources目录下,即log4j.properties日志属性配置文件
    • JUL:虽然用的是JDK11,也是添加org.slf4j:slf4j-jdk14:1.7.36

猜你喜欢

转载自blog.csdn.net/yy8623977/article/details/125726972
今日推荐