New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SLF4J-579 Export both org.slf4j and org.slf4j.helper in version 1.8 #358
Conversation
additionally to the default 2.x versions Enable baselining against latest 1.7.36 version to enforce correct semantic versioning Signed-off-by: Konrad Windszus <kwin@apache.org>
Relates to #331 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this.
Especially using the baseline plugin should help to ensure backwards compatibility in the future.
With the baseline 1.7.36 currently configured the baseline plugin says that there was a breaking change up until 2.0.10.
Can you tell where this happened? I somehow fail to read that from the print-out.
[INFO] > org.slf4j.helpers major 2.0.10 1.7.36 2.0.0 Excessive version increase
[INFO] + class org.slf4j.helpers.AbstractLogger
[INFO] + access abstract
[INFO] + implements java.io.Serializable
[INFO] + implements org.slf4j.Logger
[INFO] + field name
[INFO] + access protected
[INFO] + return java.lang.String
[INFO] + method <init>()
[INFO] + return void
[INFO] + method atDebug()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atError()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atInfo()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atLevel(org.slf4j.event.Level)
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atTrace()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atWarn()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method clone()
[INFO] + access protected
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return java.lang.Object
[INFO] + method debug(java.lang.String)
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method equals(java.lang.Object)
[INFO] + return boolean
[INFO] + method error(java.lang.String)
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method finalize()
[INFO] + access protected
[INFO] + return void
[INFO] + method getFullyQualifiedCallerName()
[INFO] + access abstract
[INFO] + access protected
[INFO] + return java.lang.String
[INFO] + method getName()
[INFO] + return java.lang.String
[INFO] + method handleNormalizedLoggingCall(org.slf4j.event.Level,org.slf4j.Marker,java.lang.String,java.lang.Object[],java.lang.Throwable)
[INFO] + access abstract
[INFO] + access protected
[INFO] + return void
[INFO] + method hashCode()
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return int
[INFO] + method info(java.lang.String)
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method isDebugEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isDebugEnabled(org.slf4j.Marker)
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isEnabledForLevel(org.slf4j.event.Level)
[INFO] + return boolean
[INFO] + method isErrorEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isErrorEnabled(org.slf4j.Marker)
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isInfoEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isInfoEnabled(org.slf4j.Marker)
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isTraceEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isTraceEnabled(org.slf4j.Marker)
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isWarnEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isWarnEnabled(org.slf4j.Marker)
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method makeLoggingEventBuilder(org.slf4j.event.Level)
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method readResolve()
[INFO] + access protected
[INFO] + return java.lang.Object
[INFO] + method toString()
[INFO] + return java.lang.String
[INFO] + method trace(java.lang.String)
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method warn(java.lang.String)
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] < class org.slf4j.helpers.BasicMDCAdapter
[INFO] + method clearDequeByKey(java.lang.String)
[INFO] + return void
[INFO] + method getCopyOfDequeByKey(java.lang.String)
[INFO] + return java.util.Deque
[INFO] + method popByKey(java.lang.String)
[INFO] + return java.lang.String
[INFO] + method pushByKey(java.lang.String,java.lang.String)
[INFO] + return void
[INFO] + class org.slf4j.helpers.LegacyAbstractLogger
[INFO] + access abstract
[INFO] + extends org.slf4j.helpers.AbstractLogger
[INFO] + implements java.io.Serializable
[INFO] + implements org.slf4j.Logger
[INFO] + field name
[INFO] + access protected
[INFO] + return java.lang.String
[INFO] + method <init>()
[INFO] + return void
[INFO] + method atDebug()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atError()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atInfo()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atLevel(org.slf4j.event.Level)
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atTrace()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atWarn()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method clone()
[INFO] + access protected
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return java.lang.Object
[INFO] + method debug(java.lang.String)
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method debug(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method debug(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method equals(java.lang.Object)
[INFO] + return boolean
[INFO] + method error(java.lang.String)
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method error(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method error(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method finalize()
[INFO] + access protected
[INFO] + return void
[INFO] + method getFullyQualifiedCallerName()
[INFO] + access abstract
[INFO] + access protected
[INFO] + return java.lang.String
[INFO] + method getName()
[INFO] + return java.lang.String
[INFO] + method handleNormalizedLoggingCall(org.slf4j.event.Level,org.slf4j.Marker,java.lang.String,java.lang.Object[],java.lang.Throwable)
[INFO] + access abstract
[INFO] + access protected
[INFO] + return void
[INFO] + method hashCode()
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return int
[INFO] + method info(java.lang.String)
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method info(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method info(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method isDebugEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isDebugEnabled(org.slf4j.Marker)
[INFO] + return boolean
[INFO] + method isEnabledForLevel(org.slf4j.event.Level)
[INFO] + return boolean
[INFO] + method isErrorEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isErrorEnabled(org.slf4j.Marker)
[INFO] + return boolean
[INFO] + method isInfoEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isInfoEnabled(org.slf4j.Marker)
[INFO] + return boolean
[INFO] + method isTraceEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isTraceEnabled(org.slf4j.Marker)
[INFO] + return boolean
[INFO] + method isWarnEnabled()
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method isWarnEnabled(org.slf4j.Marker)
[INFO] + return boolean
[INFO] + method makeLoggingEventBuilder(org.slf4j.event.Level)
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method readResolve()
[INFO] + access protected
[INFO] + return java.lang.Object
[INFO] + method toString()
[INFO] + return java.lang.String
[INFO] + method trace(java.lang.String)
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method trace(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method trace(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method warn(java.lang.String)
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method warn(java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method warn(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + return void
[INFO] < class org.slf4j.helpers.MarkerIgnoringBase
[INFO] + method atDebug()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atError()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atInfo()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atLevel(org.slf4j.event.Level)
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atTrace()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atWarn()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method isEnabledForLevel(org.slf4j.event.Level)
[INFO] + return boolean
[INFO] + method makeLoggingEventBuilder(org.slf4j.event.Level)
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] < class org.slf4j.helpers.MessageFormatter
[INFO] + method basicArrayFormat(java.lang.String,java.lang.Object[])
[INFO] + access static
[INFO] + return java.lang.String
[INFO] + method basicArrayFormat(org.slf4j.helpers.NormalizedParameters)
[INFO] + access static
[INFO] + return java.lang.String
[INFO] > class org.slf4j.helpers.NOPLogger
[INFO] - extends org.slf4j.helpers.MarkerIgnoringBase
[INFO] + method atDebug()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atError()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atInfo()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atLevel(org.slf4j.event.Level)
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atTrace()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atWarn()
[INFO] + annotated org.slf4j.helpers.CheckReturnValue
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] > method debug(org.slf4j.Marker,java.lang.String)
[INFO] + access final
[INFO] > method debug(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + access final
[INFO] > method debug(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + access final
[INFO] > method debug(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + access final
[INFO] > method debug(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + access final
[INFO] > method error(org.slf4j.Marker,java.lang.String)
[INFO] + access final
[INFO] > method error(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + access final
[INFO] > method error(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + access final
[INFO] > method error(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + access final
[INFO] > method error(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + access final
[INFO] > method info(org.slf4j.Marker,java.lang.String)
[INFO] + access final
[INFO] > method info(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + access final
[INFO] > method info(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + access final
[INFO] > method info(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + access final
[INFO] > method info(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + access final
[INFO] > method isDebugEnabled(org.slf4j.Marker)
[INFO] + access final
[INFO] + method isEnabledForLevel(org.slf4j.event.Level)
[INFO] + return boolean
[INFO] > method isErrorEnabled(org.slf4j.Marker)
[INFO] + access final
[INFO] > method isTraceEnabled(org.slf4j.Marker)
[INFO] + access final
[INFO] > method isWarnEnabled(org.slf4j.Marker)
[INFO] + access final
[INFO] + method makeLoggingEventBuilder(org.slf4j.event.Level)
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] > method trace(org.slf4j.Marker,java.lang.String)
[INFO] + access final
[INFO] > method trace(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + access final
[INFO] > method trace(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + access final
[INFO] > method trace(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + access final
[INFO] > method trace(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + access final
[INFO] > method warn(org.slf4j.Marker,java.lang.String)
[INFO] + access final
[INFO] > method warn(org.slf4j.Marker,java.lang.String,java.lang.Object)
[INFO] + access final
[INFO] > method warn(org.slf4j.Marker,java.lang.String,java.lang.Object,java.lang.Object)
[INFO] + access final
[INFO] > method warn(org.slf4j.Marker,java.lang.String,java.lang.Object[])
[INFO] + access final
[INFO] > method warn(org.slf4j.Marker,java.lang.String,java.lang.Throwable)
[INFO] + access final
[INFO] < class org.slf4j.helpers.NOPMDCAdapter
[INFO] + method clearDequeByKey(java.lang.String)
[INFO] + return void
[INFO] + method getCopyOfDequeByKey(java.lang.String)
[INFO] + return java.util.Deque
[INFO] + method popByKey(java.lang.String)
[INFO] + return java.lang.String
[INFO] + method pushByKey(java.lang.String,java.lang.String)
[INFO] + return void
[INFO] + class org.slf4j.helpers.NOP_FallbackServiceProvider
[INFO] + implements org.slf4j.spi.SLF4JServiceProvider
[INFO] + field REQUESTED_API_VERSION
[INFO] + access static
[INFO] + return java.lang.String
[INFO] + method <init>()
[INFO] + return void
[INFO] + method clone()
[INFO] + access protected
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return java.lang.Object
[INFO] + method equals(java.lang.Object)
[INFO] + return boolean
[INFO] + method finalize()
[INFO] + access protected
[INFO] + return void
[INFO] + method getLoggerFactory()
[INFO] + return org.slf4j.ILoggerFactory
[INFO] + method getMDCAdapter()
[INFO] + return org.slf4j.spi.MDCAdapter
[INFO] + method getMarkerFactory()
[INFO] + return org.slf4j.IMarkerFactory
[INFO] + method getRequestedApiVersion()
[INFO] + return java.lang.String
[INFO] + method hashCode()
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return int
[INFO] + method initialize()
[INFO] + return void
[INFO] + method toString()
[INFO] + return java.lang.String
[INFO] + class org.slf4j.helpers.NormalizedParameters
[INFO] + method <init>(java.lang.String,java.lang.Object[])
[INFO] + return void
[INFO] + method <init>(java.lang.String,java.lang.Object[],java.lang.Throwable)
[INFO] + return void
[INFO] + method clone()
[INFO] + access protected
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return java.lang.Object
[INFO] + method equals(java.lang.Object)
[INFO] + return boolean
[INFO] + method finalize()
[INFO] + access protected
[INFO] + return void
[INFO] + method getArguments()
[INFO] + return java.lang.Object[]
[INFO] + method getMessage()
[INFO] + return java.lang.String
[INFO] + method getThrowable()
[INFO] + return java.lang.Throwable
[INFO] + method getThrowableCandidate(java.lang.Object[])
[INFO] + access static
[INFO] + return java.lang.Throwable
[INFO] + method hashCode()
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return int
[INFO] + method normalize(java.lang.String,java.lang.Object[],java.lang.Throwable)
[INFO] + access static
[INFO] + return org.slf4j.helpers.NormalizedParameters
[INFO] + method normalize(org.slf4j.event.LoggingEvent)
[INFO] + access static
[INFO] + return org.slf4j.helpers.NormalizedParameters
[INFO] + method toString()
[INFO] + return java.lang.String
[INFO] + method trimmedCopy(java.lang.Object[])
[INFO] + access static
[INFO] + return java.lang.Object[]
[INFO] < class org.slf4j.helpers.SubstituteLogger
[INFO] + field createdPostInitialization
[INFO] + access final
[INFO] + return boolean
[INFO] + method atDebug()
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atError()
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atInfo()
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atLevel(org.slf4j.event.Level)
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atTrace()
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method atWarn()
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + method delegate()
[INFO] + return org.slf4j.Logger
[INFO] + method isEnabledForLevel(org.slf4j.event.Level)
[INFO] + return boolean
[INFO] + method makeLoggingEventBuilder(org.slf4j.event.Level)
[INFO] + return org.slf4j.spi.LoggingEventBuilder
[INFO] + class org.slf4j.helpers.SubstituteServiceProvider
[INFO] + implements org.slf4j.spi.SLF4JServiceProvider
[INFO] + method <init>()
[INFO] + return void
[INFO] + method clone()
[INFO] + access protected
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return java.lang.Object
[INFO] + method equals(java.lang.Object)
[INFO] + return boolean
[INFO] + method finalize()
[INFO] + access protected
[INFO] + return void
[INFO] + method getLoggerFactory()
[INFO] + return org.slf4j.ILoggerFactory
[INFO] + method getMDCAdapter()
[INFO] + return org.slf4j.spi.MDCAdapter
[INFO] + method getMarkerFactory()
[INFO] + return org.slf4j.IMarkerFactory
[INFO] + method getRequestedApiVersion()
[INFO] + return java.lang.String
[INFO] + method getSubstituteLoggerFactory()
[INFO] + return org.slf4j.helpers.SubstituteLoggerFactory
[INFO] + method hashCode()
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return int
[INFO] + method initialize()
[INFO] + return void
[INFO] + method toString()
[INFO] + return java.lang.String
[INFO] + class org.slf4j.helpers.ThreadLocalMapOfStacks
[INFO] + method <init>()
[INFO] + return void
[INFO] + method clearDequeByKey(java.lang.String)
[INFO] + return void
[INFO] + method clone()
[INFO] + access protected
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return java.lang.Object
[INFO] + method equals(java.lang.Object)
[INFO] + return boolean
[INFO] + method finalize()
[INFO] + access protected
[INFO] + return void
[INFO] + method getCopyOfDequeByKey(java.lang.String)
[INFO] + return java.util.Deque
[INFO] + method hashCode()
[INFO] + annotated jdk.internal.vm.annotation.IntrinsicCandidate
[INFO] + return int
[INFO] + method popByKey(java.lang.String)
[INFO] + return java.lang.String
[INFO] + method pushByKey(java.lang.String,java.lang.String)
[INFO] + return void
[INFO] + method toString()
[INFO] + return java.lang.String
[INFO] + annotation org.slf4j.helpers.CheckReturnValue
[INFO] + access abstract
[INFO] + implements java.lang.annotation.Annotation
[INFO] + method annotationType()
[INFO] + access abstract
[INFO] + return java.lang.Class
[INFO] + method equals(java.lang.Object)
[INFO] + access abstract
[INFO] + return boolean
[INFO] + method hashCode()
[INFO] + access abstract
[INFO] + return int
[INFO] + method toString()
[INFO] + access abstract
[INFO] + return java.lang.String
[INFO] + annotated java.lang.annotation.Documented
[INFO] + annotated java.lang.annotation.Retention
[INFO] + property value='RUNTIME'
[INFO] + annotated java.lang.annotation.Target
[INFO] + property value.0='METHOD'
[INFO] - version 1.7.36
[INFO] + version 2.0.10
@@ -28,7 +28,8 @@ | |||
<properties> | |||
<!-- yyyy-MM-dd'T'HH:mm:ss'Z' --> | |||
<project.build.outputTimestamp>2023-09-03T16:20:19Z</project.build.outputTimestamp> | |||
<latest.1.version>1.7.36</latest.1.version> | |||
<!-- package version being backwards compatible with SLF4J 1.x OSGi consumers --> | |||
<backwards.compatible.version>1.8.0</backwards.compatible.version> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you explain why you choose 1.8.0?
Did you do it because of the SemVer rules to increase the minor version if API is added?
@ceki could it happen that there will be a 1.8 version of slf4j one day?
If yes, I suggest to use something very high, e.g. 1.99 so that the package from slf4j-api 2 is always higher tan a package exported from a potential future slf4j-1.X release.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, I incremented the minor version against the 1.7.36 release because that is what https://docs.osgi.org/whitepaper/semantic-versioning/ recommends. In this case the following applies:
minor — API consumers are compatible with exporters that have the same major number and an equal or higher minor version. API providers are compatible with exporters that have the same major and minor version number. For example, 1.2 is backward compatible with 1.1 for consumers but for providers it is incompatible. Consumers should therefore import [1.2,2) and providers should import [1.2,1.3).
In this case only new classes and new methods have been added but none removed or modified in a backwards incompatible way (that is what baselining proofs as well)
could it happen that there will be a 1.8 version of slf4j one day?
It should really be 1.7.37 (or other 1.7 versions only increasing the micro version) as according to https://www.slf4j.org/download.html
The older stable SLF4J version is 1.7.36. It is no longer actively developed.
To me this means, if at all bugfix release only with no changed API signatures!
<goal>baseline</goal> | ||
</goals> | ||
<configuration> | ||
<comparisonVersion>1.7.36</comparisonVersion> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using 1.7.36 is good for the initial verification but eventually it should be the previous release to ensure there is no unintended future breakage.
With a 1.7 baseline checking is pointless since we had a major version bump compared to it, so everything is allowed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not really, because only the 1.8 package versions are properly semantically versioned. The 2.x line isn't as there each package just inherits the bundle/project version. What matters is only that 1.8 is correctly semantically versioned against the last 1.x version. Introducing a check against the latest 2.x release would be orthogonal to this use case (and would only make sure that the 2.x package versions are also semantically correct which isn't the case yet)
*,\ | ||
org.slf4j;uses:="org.slf4j.event,org.slf4j.helpers,org.slf4j.spi";version="${latest.1.version}" | ||
]]></_exportcontents> | ||
org.slf4j;version="${backwards.compatible.version}",\ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since bndtools/bnd#5789 was closed should we add the uses constraints back?
But I haven't read Peter Kriens answer in full detail.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Basically it says, that the tool does not support emitting uses twice (automatically generated) but in this particular case they are not necessary either (as there won't be ever any other bundle exporting those packages from the uses directive). Therefore I removed the manually copied uses constraints.
Baselining just emits warnings (no errors). Those are emitted at the end of the report:
This is due to the fact that by default Update: One more reasoning about
I would deliberately ignore this here, as hopefully noone ever used methods from the base class org.slf4j.helpers.MarkerIgnoringBase and the additional final notation on some methods would only affects extensions of those classes (which hopefully never happened either, although those classes are not explicitly mentioned as being ProviderType which is similar to the Eclipse Annotation |
@ceki Any feedback? |
@kwin I reviewed https://jira.qos.ch/browse/SLF4J-579 where @ceki mentions that there were many changes in IIUC the baseline tests that you introduce check that compatibility at the API level, but how about implementation? Isn't there a chance that some of the If that's the case, you might need "pinned" unit tests to verify that the behavior of the relevant classes remains stable going forward. Maybe that's just |
Baselining only checks method signatures but I consider this enough here. Semantically incompatible changes for the same method signature are very unlikely, but once there is an actual issue we can fix it then. Hopefully @ceki can decide if there already is an issue, but I understood from JIRA comments that only new stuff has been added in those packages. |
Thank you for this report. Please let me know if commit 02b36a2 is satisfactory. |
This PR contains baselining which I consider crucial to maintain backwards compatibility. Any reason you don't want to integrate that @ceki? |
additionally to the default 2.x versions
Enable baselining against latest 1.7.36 version to enforce correct semantic versioning