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

14
首先,我将简要解释一下情境。在我的应用程序中,我使用SLF4J作为日志门面。对于日志记录,我使用Log4j2,并且我还有自定义的log4j2.xml。当我在我的类中记录日志时,我创建一个如下所示的记录器:
private static final Logger LOG = LogManager.getLogger(TestController.class);

后来我发现有一个@Slf4j注释,我就可以在不手动创建日志记录器实例的情况下进行日志记录。
log.info("Info log in getHello() in TestController");

我对使用@Slf4j注释而不是在类中创建记录器实例是否存在任何缺点进行了一些小型研究。我没有发现任何不应该使用@Slf4j注释的原因。

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

2个回答

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);

除了该领域的名称之外。


谢谢@Turing85!使用Slf4j注释有什么缺点吗? - Sankalpa Wijewickrama
3
只有使用 lombok 时常见的缺陷:依赖于未经记录的编译器 API,可能会在没有事先通知的情况下更改并破坏 lombok。 - Turing85
太好了。那我把注释放在哪里? - MiguelMunoz
@MiguelMunoz,你没有阅读我在答案中提供的文档,是吗? - Turing85
1
我没有仔细阅读它。现在我看到它是关于类的。 - MiguelMunoz

7
@Slf4j

上述的Lombok注解创建了一个基于slf4j的Logger,但是你需要一个基于log4j的logger。所以不要觉得你可以使用基于slf4j的logger。

如果你计划使用基于slf4j的logger,Lombok会在编译阶段修改代码并生成代码,而不是像cglib或使用反射一样在运行时生成代码。这意味着不会有性能下降。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接