使用@Slf4j注释进行日志记录

San*_*ama 16 java logging slf4j lombok

首先,我将简要解释一下该场景。在我的应用程序中,我使用 SLF4J 作为日志记录外观。对于日志记录,我使用 Log4j2 并且log4j2.xml也进行了自定义。当我登录我的课程时,我创建一个记录器,如下所述:

private static final Logger LOG = LogManager.getLogger(TestController.class);
Run Code Online (Sandbox Code Playgroud)

后来发现有一个@Slf4j注解,然后不用手动创建logger实例就可以日志了。

log.info("Info log in getHello() in TestController");
Run Code Online (Sandbox Code Playgroud)

@Slf4j我对使用注释而不是在类中创建记录器实例有什么缺点的主题做了一个小研究。我没有遇到任何不应该使用@Slf4j注释的理由。

然而,在继续之前,我想向这个社区询问,以确认使用是否有任何缺点@Slf4j?

Tur*_*g85 13

来自和朋友的文档@Log:

...

@Slf4j

创造private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

...

我们看到这相当于

private static final Logger LOG = LogManager.getLogger(TestController.class);
Run Code Online (Sandbox Code Playgroud)

除了字段名称之外。

  • 只有使用 lombok 时遇到的常见缺点:依赖未记录的编译器 API,该编译器 API 可能会在没有事先通知的情况下发生更改并破坏 lombok。 (3认同)

小智 7

@Slf4j
Run Code Online (Sandbox Code Playgroud)

来自 lombok 的上述注释创建了一个基于 slf4j 的记录器,但您将需要一个基于 log4j 的记录器。所以不要觉得你可以使用基于 slf4j 的记录器。

如果您计划使用基于 slf4j 的记录器,lombok 会在编译阶段修改代码并创建代码,而不是像 cglib 那样在运行时或使用反射。这意味着性能不会有任何下降。