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

Using @Slf4j annotation for logging

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

private static final Logger LOG = LogManager.getLogger(TestController.class);

后来,我发现有一个@Slf4j注释,然后我可以在不手动创建记录器实例的情况下进行记录。

log.info("Info log in getHello() in TestController");

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

但是,在继续之前,我想问这个社区确认使用 @Slf4j 有什么缺点吗?

来自documentation of @Log and friends

...

@Slf4j

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

...

我们看到这相当于

private static final Logger LOG = LogManager.getLogger(TestController.class);

除了字段名称。

@Sl4j

以上来自 lombork 的注释创建了一个基于 Sl4j 的记录器,但您需要一个基于 Log4j 的记录器。所以不要觉得你可以使用基于 Sl4j 的记录器。

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