2015-07-15 3 views
4

Я следовал this ответам, чтобы добавить приложение во время выполнения. Несмотря на то, что работает для оригинального плаката, я получаю это исключение в строке Logger logger = (Logger) LoggerFactory.getLogger("abc.xyz");:ClassCastException: org.slf4j.impl.Log4jLoggerAdapter не может быть передан ch.qos.logback.classic.Logger

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) 

Простой вопрос ... почему это работает для него, а не для меня? :-P

+1

Проверьте библиотеку вы получаете ваш Logger и LoggerFactory от, все они должны быть одинаковыми. –

ответ

1

Это похоже на симптом наличия нескольких версий одной и той же зависимости (slf4j) в вашем пути к классам.

Посмотрите в журналах для этого сообщения:

SLF4J: Class path contains multiple SLF4J bindings.

Это будет по умолчанию с помощью первого SLF4J ссылки он находит в пути к классам. Раньше я исправлял это, перемещая свои зависимостей журнала (logback-classic и logback-core) в начало раздела зависимостей моего файла Maven pom.xml, который помещает их ранее в путь к классам. Это хрупкое решение, и оно может не работать в зависимости от архитектуры приложения. (например, если ваш проект запуска содержит конфликтующую зависимость в pom.xml, и вы ссылаетесь на Резервирование через другой проект и его pom.xml)

0

Из-за уже существующей зависимости SLF4J от вашего проекта или другого унаследованного проекта , во время выполнения могут быть конфликты. При добавлении исключения в мой POM файл работал для меня:

 <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
     </exclusions> 
Смежные вопросы