Skip to content

Commit

Permalink
Fix #444 - Monix3MdcAdapter.initialize() is broken for logback 1.4.8
Browse files Browse the repository at this point in the history
  • Loading branch information
kevin-lee committed Jul 14, 2023
1 parent a0f3902 commit fc50763
Showing 1 changed file with 24 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package loggerf.logger.logback

import ch.qos.logback.classic.LoggerContext
import logback_scala_interop.JLoggerFMdcAdapter
import monix.execution.misc.Local
import org.slf4j.MDC
import org.slf4j.{LoggerFactory, MDC}

import java.util.{Map => JMap, Set => JSet}
import scala.jdk.CollectionConverters._
import scala.util.control.NonFatal

/** @author Kevin Lee
* @since 2023-02-18
Expand Down Expand Up @@ -41,12 +43,32 @@ class Monix3MdcAdapter extends JLoggerFMdcAdapter {
object Monix3MdcAdapter {

@SuppressWarnings(Array("org.wartremover.warts.Null"))
def initialize(): Monix3MdcAdapter = {
private def initialize0(): Monix3MdcAdapter = {
val field = classOf[MDC].getDeclaredField("mdcAdapter")
field.setAccessible(true)
val adapter = new Monix3MdcAdapter
field.set(null, adapter) // scalafix:ok DisableSyntax.null
field.setAccessible(false)
adapter
}

@SuppressWarnings(Array("org.wartremover.warts.AsInstanceOf"))
def initialize(): Monix3MdcAdapter = {
val loggerContext = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext]
initializeWithLoggerContext(loggerContext)
}

def initializeWithLoggerContext(loggerContext: LoggerContext): Monix3MdcAdapter = {
val adapter = initialize0()
try {
val field = classOf[LoggerContext].getDeclaredField("mdcAdapter")
field.setAccessible(true)
field.set(loggerContext, adapter)
field.setAccessible(false)

Check warning on line 67 in modules/logger-f-logback-mdc-monix3/shared/src/main/scala/loggerf/logger/logback/Monix3MdcAdapter.scala

View check run for this annotation

Codecov / codecov/patch

modules/logger-f-logback-mdc-monix3/shared/src/main/scala/loggerf/logger/logback/Monix3MdcAdapter.scala#L65-L67

Added lines #L65 - L67 were not covered by tests
adapter
} catch {
case NonFatal(_) => adapter
}
}

}

0 comments on commit fc50763

Please sign in to comment.