Tomcat日志显示您在类路径上还有另一个slf4j-1.7.7.jar:
使用CLASSPATH:/usr/local/Cellar/tomcat/8.0.18/libexec/bin/jul-to-
slf4j-1.7.7.jar: /usr/local/Cellar/tomcat/8.0.18/libexec/bin/slf4j
-api-1.7.7.jar :/usr/local/Cellar/tomcat/8.0.18/libexec/bin/logback-
classic-1.1.2.jar:/usr/local/Cellar/tomcat/8.0.18/libexec /bin/logback-
core-1.1.2.jar:/usr/local/Cellar/tomcat/8.0.18/libexec/bin/logback-
config/:/usr/local/Cellar/tomcat/8.0.18/libexec/ bin /
bootstrap.jar:/usr/local/Cellar/tomcat/8.0.18/libexec/bin/tomcat-juli.jar
初始化Tomcat后,它将初始化jul-to-slf4j和slf4j-api。这些jar由加载了Tomcat jar(sun / misc /
Launcher $ AppClassLoader)的Classloader加载。
当您的应用程序尝试访问slf4j-api类时,它将使用WebApplication Classloader(org / apache / catalina
/ loader /
WebappClassLoader),默认情况下,该应用程序在应用程序类路径中搜索系统类路径之前的类定义。请注意,这可以更改:https : //tomcat.apache.org/tomcat-8.0-doc/class-loader-
howto.html
在Java中,类签名由类的完全限定名称和加载该类的类加载器组成。如果从两个不同的类加载器(相同的层次结构)两次加载一个类,则JVM将有两个不同的类。尝试将一个类的对象引用指向另一个类的变量将导致ClassCastException。请查看此博客文章(项目5)以获取有关此的更多信息:https : //techblug.wordpress.com/2012/03/17/classloader-
tips/
因此,据我所知,您可以通过从Tomcat类路径中删除slf4j-*。jar来解决此问题,或者如果使用相同版本的slf4j拥有一个以上的webapp,则可以从webapp中删除jar。它将使用Tomcat类加载器加载的那些。



