Era*_*ndo 11 java logging log4j logback slf4j
我正在按照这个答案,以便在运行时添加一个appender.虽然这适用于原始海报,但我得到了这个例外Logger logger = (Logger) LoggerFactory.getLogger("abc.xyz");:
java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerAdapter cannot be cast to ch.qos.logback.classic.Logger
de.mypackage.controller.MyController.meinOeOrte(MyController.java:335)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Run Code Online (Sandbox Code Playgroud)
简单的问题......为什么它适合他而不适合我?:-P
这看起来像是在类路径中具有相同依赖项(slf4j)的多个版本的症状。
在日志中查找此消息:
SLF4J: Class path contains multiple SLF4J bindings.
它将默认使用在类路径中找到的第一个slf4j引用。过去,我已通过将Logback依赖项(logback-classic和logback-core)移动到Maven pom.xml文件的“ dependencies”部分的顶部(将其放在类路径中的位置)来解决此问题。那是一个脆弱的解决方案,它可能无法使用,具体取决于您的应用程序体系结构。(例如,如果您的启动项目的pom.xml中包含冲突的依赖项,并且您通过另一个项目及其pom.xml引用了Logback)
由于您的项目或其他继承项目中已存在 SLF4J 依赖项,因此在运行时可能会出现冲突。在我的文件中添加排除项POM对我有用:
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15684 次 |
| 最近记录: |