LoggerFactory与Logger

RaH*_*aHe 6 logging log4j slf4j

我有一个问题,我还没有找到答案.那两条线有什么区别?

private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

private static final Logger LOGGER = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

应该使用哪一个?为什么?谢谢.

小智 7

您已使用标记了问题,所以我假设您的项目设置为使用 SLF4J 并且它使用其 log4j 绑定。

如果您在类中使用 SLF4J 绑定(import org.slf4j.Logger;在顶部),那么您需要使用LoggerFactory.getLogger(并且您还需要使用import org.slf4j.LoggerFactory;)。

如果您直接使用 log4j(import org.apache.log4j.Logger;在类的顶部),则使用Logger.getLogger.

通常,使用 SLF4J 的目的是成为您用于所有日志记录命令的标准,并让它担心连接到实际的日志记录框架。因此,如果您的项目使用 SLF4J,则使用 SLF4J 绑定。或者,如果你只是想直接使用log4j,那么直接使用就可以了,也许你甚至不需要使用SLF4J库。(我本人是 SLF4J 的忠实粉丝,所以我建议将它用于所有情况,但这只是我的意见。)

我猜也许您的开发环境会自动选择其中之一进行导入,您甚至可能Logger在不同的类中导入了不同的 s,而您甚至没有意识到它们使用的不是同一个。