2014-01-24 54 views
4

我在基于tomcat的web应用程序中使用Logback和SLF4J。我没有使用任何logback.xml文件。一切都以编程方式完成。但是,不时我得到了以下错误消息:Logback和SLF4J编程配置

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

和这个代码的部分抛出该异常:

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

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

回答

4

据我所知,这是由SLF4J在支持日志记录实现尚未初始化时使用中间工厂引起的。如果您首先要求记录器LoggerFactory,例如根记录器,这将启动Logback,之后你的代码应该得到合适的LoggerContext。我遇到这种情况是因为我的记录器在第一次访问时被懒惰地创建,并且只有在我尝试检索LoggerContext之后,第一个日志语句才出现。在类中检索LoggerContext的类中具有通常的private static final Logger = LoggerFactory.getLogger("...")行也具有相同的效果,尽管连接并不明显。