在开发过程中, 打印必要的日志是必不可少的一环, 而要打印日志, 在相关的类中就要引入日志相关属性, 在传统上, 一般是通过 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";
}
}
如果你自己声明, 则有以下一些问题:
- 相关声明麻烦又冗长, 你可能很难记住, 每次要用都要去其它地方拷贝;
- 不同的类要根据当前的类名自行调整那个
XXX.class
的值, 如果粗心大意的拷贝而忘记改动还可能带来一些潜在的问题; - 如果错误引入了
Logger
和LoggerFactory
接口也会导致一些潜在的问题.
而使用注解的方式就简单多了, 你完全不用操心以上问题.
不停地消除各种重复, 提高效率是我们编码过程中的一种追求, 关于使用 lombok @Slf4j 注解简化日志功能的引入就介绍到此, 更多关于 重复性管理 主题的介绍请参考 重复性管理 .