Logback和SLF4J编程式配置

5

我正在使用Logback和SLF4J在基于Tomcat的Web应用程序中。我没有使用任何logback.xml文件。一切都是通过编程完成的。然而,我偶尔会收到以下错误消息:

java.lang.ClassCastException: org.slf4j.helpers.SubstituteLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext.

以下是引发该异常的代码片段:

LoggerContext logCtx = (LoggerContext) LoggerFactory
                .getILoggerFactory();

我想知道是否有做错了什么。请协助。

1个回答

4
据我所知,这是由于SLF4J在后端日志实现未初始化时使用中间工厂所致。如果您首先请求LoggerFactory的记录器,例如根记录器,则会初始化Logback,然后您的代码应该获得一个合适的LoggerContext。我遇到了这个问题,因为我的记录器在第一次访问时被惰性创建,第一条日志语句是在我尝试检索LoggerContext之后才出现的。在检索LoggerContext的类中通常有private static final Logger = LoggerFactory.getLogger("...")行,这也会产生同样的效果,尽管它们之间的联系不太明显。

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