日志门面Slf4j框架原理简介

1. 简介

Simple Logging Facade for Java (SLF4J) 用作各种日志框架(例如 java.util.logging、log4j 1.x、reload4j 和 logback)的简单外观或抽象。 SLF4J 允许最终用户在部署时插入所需的日志记录框架。

2. @Slf4j注解 的原理解析

在实际项目中 当我们标记Lombok提供的@Slf4j注解时,可以直接在代码块中使用log对象进行日志输出。
编译后
在这里插入图片描述

编译后 注解消失,生成Logger对象
在这里插入图片描述

第一次编译,未初始化:
在这里插入图片描述

performInitialization()方法中的bind方法是绑定日志框架的核心方法
在这里插入图片描述

bind()方法中通过findPossibleStaticLoggerBinderPathSet()方法加载日志框架的路径
在这里插入图片描述

在这里插入图片描述

总的来说: slf4j 组件对外提供统一的日志对象访问接口,log4j 这类组件会实现这个接口中的相关标准规定。获取真正的记录日志的Logger对象,都是通过LoggerFactory的getLogger()方法来获取的 :Logger logger = LoggerFactory.getLogger(App.class) 。这个方法会bind(绑定)具体的实现了slf4j组件标准的类,所有的实现了slf4j标准的类都必定有一约定好的类:org/slf4j/impl/StaticLoggerBinder.class。通过 loggerFactoryClassLoader.getResources(“org/slf4j/impl/StaticLoggerBinder.class”) 获取到类的完整路径,从而获取到具体实现类,然后就会调用这个类(对 log4j 来说就是Log4jLoggerFactory这个类)的getLogger()方法获取到真正记录日志的Logger对象,从而实现日志的记录。

3.MDC(Mapped Diagnostic Context)的使用和作用。

MDC(Mapped Diagnostic Context)是 SLF4J(Simple Logging Facade for Java)提供的一个高级特性,用于在多线程环境下记录和管理日志的上下文信息。MDC 允许你在一个线程中设置和存储上下文信息,然后在该线程中的任何地方记录这些信息,而不必手动将这些信息传递给每个日志记录语句。这在处理多线程或分布式应用程序中非常有用,因为它允许你为每个线程或请求设置自定义的上下文信息,以便更好地追踪和分析日志。

以下是 MDC 的主要使用和作用:

  1. 上下文信息的存储和传递:MDC 允许你在应用程序中的某个地方设置上下文信息,例如用户ID、会话ID、请求ID等。然后,这些信息将被存储在线程的上下文中,可以在同一线程内的任何地方访问。

  2. 日志记录时的信息丰富:通过 MDC,你可以在日志记录语句中引用上下文信息,从而使日志更加丰富和有用。例如,你可以在日志消息中包含用户ID、请求ID等信息,以便在日志中跟踪特定用户或请求的操作。

  3. 多线程安全:MDC 是线程安全的,每个线程都有自己的 MDC 上下文,不会干扰其他线程的上下文信息。这使得在多线程环境中使用 MDC 非常方便。

  4. 日志跟踪和诊断:MDC 可以用于追踪和诊断问题,特别是在分布式系统中。通过将请求ID或会话ID设置为上下文信息,你可以跟踪特定请求的整个生命周期,甚至跨越多个服务和节点。

public class MyLogger {
    private static final Logger logger = LoggerFactory.getLogger(MyLogger.class);
    public static void main(String[] args) {
        // 设置上下文信息
        MDC.put("userID", "12345");
        MDC.put("requestID", "ABCDE");
        // 记录日志
        logger.info("User {} made a request with ID {}", MDC.get("userID"), MDC.get("requestID"));
        // 清除上下文信息
        MDC.clear();
    }
}
  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值