jlv icon indicating copy to clipboard operation
jlv copied to clipboard

Client slf4j API versions newer than 1.7.21 throw InvalidClassException

Open slessman opened this issue 7 years ago • 0 comments

We upgraded the slf4j-api-1.7.21.jar in our java project to slf4j-api-1.7.25.jar. This causes JLV logging to break with the following stacktrace in the plugin log (/.metadata/.plugins/com.rdiachenko.jlv.plugin/logs/jlv-plugin.log):

[2017-04-13 10:10:12,614] [ERROR] [SocketConnectionHandler] [pool-15-thread-1]: Failed to handle input stream
java.io.InvalidClassException: org.slf4j.helpers.BasicMarker; local class incompatible: stream classdesc serialVersionUID = -2849567615646933777, local class serialVersionUID = 1803952589649545191
	at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
	at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
	at ch.qos.logback.classic.spi.LoggingEventVO.readObject(LoggingEventVO.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
	at java.io.ObjectInputStream.readSerialData(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at com.rdiachenko.jlv.SocketConnectionHandler.run(SocketConnectionHandler.java:39)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
[2017-04-13 10:10:12,614] [INFO] [SocketConnectionHandler] [pool-15-thread-1]: Stopping connection handler
[2017-04-13 10:10:12,615] [INFO] [SocketConnectionHandler] [pool-15-thread-1]: Connection handler stopped

Downgrading our version of slf4j-api to the version packaged with JLV resolves the problem. We are using SLF4J Markers defined like:

private static final Marker mDefaultMarker = MarkerFactory.getMarker("DEFAULT");

And call the SLF4J log method via:

logger.log(mDefaultMarker , Logger.FQCN, Level.toLocationAwareLoggerInteger(level), msg, new Object[] {}, throwable);

I doubt there's much you can do to resolve the issue since the problem is with the underlying SLF4J API, but this report may be useful to other people that are trying to track down why logging stopped working.

slessman avatar Apr 13 '17 15:04 slessman