Skip to content

Are values in the MDC intended to be include in the context logged by Slf4jLogger? #851

@morgen-peschke

Description

@morgen-peschke

While adding tests to Slf4jLogger in #850 I noticed that, every now and again, the tests would fail because extra values would be captured as context.

Looking at the failure, it's the value set in the "Slf4jLoggerInternal resets after logging" test. I didn't see in the docs if this was intended behavior or not, and I could see arguments for either behavior, so I figured it's worth asking about and documenting.

munit.ComparisonFailException: /Users/morgen/learning/log4cats/slf4j/src/test/scala/org/typelevel/log4cats/slf4j/internal/Slf4jLoggerInternalSuite.scala:256
255:      slf4jLogger.error("error(msg)").assert >>
256:      IO(testLogger.logs().asScala.toList).assertEquals(
257:        List(
values are not the same
=> Obtained
List(
  DeferredStructuredLogMessage(LogLevel.Trace,Map(foo -> yellow),None,trace(msg)),
  DeferredStructuredLogMessage(LogLevel.Debug,Map(foo -> yellow),None,debug(msg)),
  DeferredStructuredLogMessage(LogLevel.Info,Map(foo -> yellow),None,info(msg)),
  DeferredStructuredLogMessage(LogLevel.Warn,Map(foo -> yellow),None,warn(msg)),
  DeferredStructuredLogMessage(LogLevel.Error,Map(foo -> yellow),None,error(msg))
)
=> Diff (- obtained, + expected)
 List(
-  DeferredStructuredLogMessage(LogLevel.Trace,Map(foo -> yellow),None,trace(msg)),
-  DeferredStructuredLogMessage(LogLevel.Debug,Map(foo -> yellow),None,debug(msg)),
-  DeferredStructuredLogMessage(LogLevel.Info,Map(foo -> yellow),None,info(msg)),
-  DeferredStructuredLogMessage(LogLevel.Warn,Map(foo -> yellow),None,warn(msg)),
-  DeferredStructuredLogMessage(LogLevel.Error,Map(foo -> yellow),None,error(msg))
+  DeferredStructuredLogMessage(LogLevel.Trace,Map(),None,trace(msg)),
+  DeferredStructuredLogMessage(LogLevel.Debug,Map(),None,debug(msg)),
+  DeferredStructuredLogMessage(LogLevel.Info,Map(),None,info(msg)),
+  DeferredStructuredLogMessage(LogLevel.Warn,Map(),None,warn(msg)),
+  DeferredStructuredLogMessage(LogLevel.Error,Map(),None,error(msg))
 )

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions