jlv
jlv copied to clipboard
Client slf4j API versions newer than 1.7.21 throw InvalidClassException
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 (
[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.