Lombok @Log 系列注解: 简化日志记录

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/

截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观

Lombok 提供了一系列 @Log 注解,用于自动生成日志记录器实例,简化 Java 类中日志的定义和使用。这些注解支持常见的日志框架,比如 java.util.loggingLog4jLog4j2Slf4j 等。通过 @Log 注解,开发者不再需要手动定义 Logger 实例,代码更简洁,同时符合实际需求的日志框架。

可用的 @Log 注解

Lombok 支持多个日志框架,每个框架对应一个专门的注解:

  • @Log:使用 java.util.logging(JUL);
  • @CommonsLog:使用 Apache Commons Logging;
  • @Log4j:使用 Log4j;
  • @Log4j2:使用 Log4j2;
  • @Slf4j:使用 SLF4J;
  • @XSlf4j:使用 SLF4J 的扩展(XSLF4J);
  • @JBossLog:使用 JBoss Logging;

每个注解都会自动在类中生成一个静态的日志记录器实例,变量名称根据框架的不同,通常是 log

基本用法示例

以下示例展示了使用不同日志注解的代码示例和日志输出方式:

使用 @Slf4j 示例

@Slf4j 是使用最广泛的注解之一,它基于 SLF4J 日志框架。通过 @Slf4j 注解,Lombok 会自动生成一个 log 变量。

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ExampleService {

    public void performTask() {
        log.info("信息级别日志.");
        log.warn("警告级别日志.");
        log.error("错误级别日志.");
    }
}

在上面的代码中,log 对象是由 Lombok 自动生成的 Logger 实例,开发者可以直接调用 infowarnerror 等方法输出日志。

使用 @Log4j2 示例

如果项目使用 Log4j2 作为日志框架,可以使用 @Log4j2 注解。Lombok 会自动生成一个 Log4j2 的 Logger 实例:

import lombok.extern.log4j.Log4j2;

@Log4j2
public class ExampleService {

    public void performTask() {
        log.info("Performing task with Log4j2.");
        log.debug("Debugging information.");
    }
}

log 变量是自动生成的 Log4j2 Logger 实例,可以使用所有的 Log4j2 日志级别方法。

使用 @Log 示例

@Log 注解使用 Java 内置的 java.util.logging (JUL) 日志框架,对于不需要第三方日志库的轻量级应用非常适合。

import lombok.extern.java.Log;

@Log
public class ExampleService {

    public void performTask() {
        log.info("Using java.util.logging for task.");
        log.warning("This is a warning message.");
    }
}

在这里,log 变量是 java.util.logging.Logger 实例,可以直接调用 JUL 的日志方法。

@Log 注解生成的日志对象

每个日志注解生成的 Logger 变量都具备以下特性:

  • 静态和只读:日志记录器实例是 static final 类型,确保整个类只会生成一个日志记录器实例。
  • 命名为 log:生成的变量名称统一为 log,便于开发者识别和调用。
  • 支持日志级别:根据日志框架的不同,log 变量支持相应的日志级别方法(如 infowarnerror 等)。

小结

Lombok 的 @Log 注解系列为 Java 类的日志记录提供了便捷的方式,无需手动定义日志记录器对象。根据不同的日志框架,选择相应的 @Log 注解:

  • @Slf4j@Log4j2 是使用最广泛的注解,适合现代 Java 项目。
  • @Log 适合需要轻量级日志记录的项目,直接使用 java.util.logging

这些注解帮助开发者减少样板代码,提升日志管理的可维护性。