0

I'm getting java.lang.IncompatibleClassChangeError when using slf4j.Marker. It seems I have several slf4j versions in classpath. But when executing maven dependency:tree it says there is only slf4j 1.7.25. Do you guys have any ideas what might be the problem? The dependencies are as follows:

  • logback 1.2.3
  • slf4j 1.7.25
  • logstash-logback-encoder 5.0

The app is deployed on WildFlly 8.2.1 AS.

> -ERROR in net.logstash.logback.appender.LogstashTcpSocketAppender[stash] - Unable to process event: Class net.logstash.logback.marker.ObjectAppendingMarker does not implement the requested interface org.slf4j.Marker java.lang.IncompatibleClassChangeError: Class net.logstash.logback.marker.ObjectAppendingMarker does not implement the requested interface org.slf4j.Marker
> 
> 2018-03-31 00:17:03,287 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at java.lang.IncompatibleClassChangeError: Class net.logstash.logback.marker.ObjectAppendingMarker does not implement the requested interface org.slf4j.Marker
> 
> 2018-03-31 00:17:03,287 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.composite.loggingevent.JsonMessageJsonProvider.writeTo(JsonMessageJsonProvider.java:52)
> 
> 2018-03-31 00:17:03,287 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.composite.loggingevent.JsonMessageJsonProvider.writeTo(JsonMessageJsonProvider.java:31)
> 
> 2018-03-31 00:17:03,287 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.composite.JsonProviders.writeTo(JsonProviders.java:77)
> 
> 2018-03-31 00:17:03,287 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.composite.CompositeJsonFormatter.writeEventToGenerator(CompositeJsonFormatter.java:175)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.composite.CompositeJsonFormatter.writeEventToOutputStream(CompositeJsonFormatter.java:152)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.encoder.CompositeJsonEncoder.encode(CompositeJsonEncoder.java:114)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.encoder.CompositeJsonEncoder.encode(CompositeJsonEncoder.java:32)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender$TcpSendingEventHandler.onEvent(AbstractLogstashTcpSocketAppender.java:454)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender$TcpSendingEventHandler.onEvent(AbstractLogstashTcpSocketAppender.java:264)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.appender.AsyncDisruptorAppender$EventClearingEventHandler.onEvent(AsyncDisruptorAppender.java:330)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2)  at  at net.logstash.logback.appender.AsyncDisruptorAppender$EventClearingEventHandler.onEvent(AsyncDisruptorAppender.java:318)
> 
> 2018-03-31 00:17:03,288 INFO  [stdout] (logback-appender-stash-127.0.0.1:4560-2) 
romanvintonyak
  • 351
  • 1
  • 3
  • 17

1 Answers1

2

Well you are right this issue occurs because of several slf4j versions in classpath

Now we need to find out how it happened

Case 1:

When I look into maven reporitory for logback 1.2.3 I see it already has dependency to slf4j.

So when you load logback 1.2.3, slf4j will be added automatically

So you dont need to add additional slf4j into pom, if you are doing so pls remove it.

Refer link for more detail - Compile Depencencies:

Case 2:

Look into wildfly/modules/system/layers/base/org/slf4j

folder see if there is any slf4j jars already added into it. If so you need slf4j while compiling only

add <scope>compile</scope>

MyTwoCents
  • 7,284
  • 3
  • 24
  • 52
  • actually wildfly/modules/system/layers/base/org/slf4j is overridden with slf4j 1.7.25 (I excluded the one from WF in jboss-deployment-structure.xml and added slf4j 1.7.25 in maven dependencies) – romanvintonyak Apr 01 '18 at 18:38
  • Is it possible mvn dependency:tree -Dverbose=true -Dincludes=org.slf4 does not show all the transitive dependencies? – romanvintonyak Apr 01 '18 at 18:39
  • thanks for the help. Indeed there were two slf4j versions in classpath. It works after excluding one of them – romanvintonyak Apr 02 '18 at 08:48