使用 lombok @Slf4j 注解简化日志功能的引入

文章介绍了在Java开发中如何使用Lombok的@Slf4j注解来减少日志记录的样板代码,避免重复。通过引入Lombok库和添加@Slf4j注解,可以直接在类中使用预定义的log变量,无需手动创建Logger实例。这种方法简化了代码,提高了开发效率,并讨论了从传统日志记录方式转换到@Slf4j的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程中, 打印必要的日志是必不可少的一环, 而要打印日志, 在相关的类中就要引入日志相关属性, 在传统上, 一般是通过 LoggerFactory.getLogger 去实现的:

package net.xiaogd.demo.mybatis.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogDemoController {

    // 自行声明
    private static final Logger log = LoggerFactory.getLogger((LogDemoController.class));

    //...
}

尽管这已经很简洁, 但如果有大量的类要做类似的操作, 还是略显重复, 从 重复性管理 的角度, 我们怎么才能尽量减少这些重复的样板代码呢?

答案就是利用 lombok@Slf4j 注解.

使用 lombok @Slf4j 注解的前提

自然, 在你的项目中首先需要引入 lombok, maven 中增加相关依赖, IDE 也需要做些调整, 安装相关插件, 你可以参考前面的 引入 lombok 简化代码及相关 IDE 设置 进行相关操作, 此处不再赘述.

此外, 相关的日志依赖也是要有的, 如果你已经用旧方式启用了日志, 相关依赖通常都是包含了的, 此处也不再展开详说.

lombok @Slf4j 注解的具体用法

有了 lombok 后, 在类中要引入日志功能就变得很简洁了, 只需要在类的上面添加 @Slf4j 注解即可:

package net.xiaogd.demo.mybatis.controller;

import org.springframework.web.bind.annotation.RestController;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
public class DemoController {
	// ...
}

在这之后, lombok 会为我们注入一个 name 为 log 的日志属性, 在代码中直接使用即可:

package net.xiaogd.demo.mybatis.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
public class DemoController {

	@GetMapping("/hello")
	public String hello() {
		log.info("enter hello...");
		return "hello rest";
	}
}

注意: 注入变量的缺省名字就是 log.

当然, 这个名字也可以通过 lombok.log.fieldName 配置去调整, 参考 lombok 官网的相关介绍: https://projectlombok.org/features/configuration 以及 https://projectlombok.org/features/log

一般不建议去调整, 毕竟 log 这个名称最简洁, 敲起来也最方便.

如果你现有代码使用了传统方式, 并且不是用的 log 这个名字, 现在又想调整为使用 @Slf4j 方式, 那么可以先使用 重构(refactor)–重命名(rename) 的方式改名, 然后再引入.

就好比如下你自己声明了 Logger log 那样:

@RestController
public class LogDemoController {

    // 自行声明
    private static final Logger log = LoggerFactory.getLogger((LogDemoController.class));

	@GetMapping("/hello1")
	public String hello() {
		log.info("enter hello...");
		return "hello rest";
	}
}

如果你自己声明, 则有以下一些问题:

  1. 相关声明麻烦又冗长, 你可能很难记住, 每次要用都要去其它地方拷贝;
  2. 不同的类要根据当前的类名自行调整那个 XXX.class 的值, 如果粗心大意的拷贝而忘记改动还可能带来一些潜在的问题;
  3. 如果错误引入了 LoggerLoggerFactory 接口也会导致一些潜在的问题.

而使用注解的方式就简单多了, 你完全不用操心以上问题.

不停地消除各种重复, 提高效率是我们编码过程中的一种追求, 关于使用 lombok @Slf4j 注解简化日志功能的引入就介绍到此, 更多关于 重复性管理 主题的介绍请参考 重复性管理 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值