diff options
author | Diego Parra <diegolparra@gmail.com> | 2016-07-03 15:07:03 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-03 15:07:03 -0300 |
commit | ebc560f24154ddec862411b82a79033164bb2c31 (patch) | |
tree | dd12aad175583349f160c4b960b3fdfadedcc68c /kamon-core/src | |
parent | 8516613ad2ffd5b29f2e611a0a9e9006c5613ea4 (diff) | |
parent | 8e7f64134c6e2ef48926bf63943fa3338636a62c (diff) | |
download | Kamon-ebc560f24154ddec862411b82a79033164bb2c31.tar.gz Kamon-ebc560f24154ddec862411b82a79033164bb2c31.tar.bz2 Kamon-ebc560f24154ddec862411b82a79033164bb2c31.zip |
Merge pull request #363 from dspasojevic/mdc
= kamon-core: add context name and token to MDC
Diffstat (limited to 'kamon-core/src')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/logging/MdcKeysSupport.scala | 16 | ||||
-rw-r--r-- | kamon-core/src/test/scala/kamon/trace/logging/MdcKeysSupportSpec.scala | 44 |
2 files changed, 57 insertions, 3 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/logging/MdcKeysSupport.scala b/kamon-core/src/main/scala/kamon/trace/logging/MdcKeysSupport.scala index abe56cd3..60a02ef8 100644 --- a/kamon-core/src/main/scala/kamon/trace/logging/MdcKeysSupport.scala +++ b/kamon-core/src/main/scala/kamon/trace/logging/MdcKeysSupport.scala @@ -17,13 +17,18 @@ package kamon.trace.logging import kamon.trace.TraceLocal.AvailableToMdc -import kamon.trace.{ Tracer, EmptyTraceContext, MetricsOnlyContext, TraceContext } +import kamon.trace.{ EmptyTraceContext, MetricsOnlyContext, TraceContext, Tracer } import kamon.util.Supplier - import org.slf4j.MDC trait MdcKeysSupport { + val traceTokenKey = "traceToken" + + val traceNameKey = "traceName" + + private val defaultKeys = Seq(traceTokenKey, traceNameKey) + def withMdc[A](thunk: ⇒ A): A = { val keys = copyToMdc(Tracer.currentContext) try thunk finally keys.foreach(key ⇒ MDC.remove(key)) @@ -34,7 +39,12 @@ trait MdcKeysSupport { private[this] def copyToMdc(traceContext: TraceContext): Iterable[String] = traceContext match { case ctx: MetricsOnlyContext ⇒ - ctx.traceLocalStorage.underlyingStorage.collect { + + // Add the default key value pairs for the trace token and trace name. + MDC.put(traceTokenKey, ctx.token) + MDC.put(traceNameKey, ctx.name) + + defaultKeys ++ ctx.traceLocalStorage.underlyingStorage.collect { case (available: AvailableToMdc, value) ⇒ Map(available.mdcKey -> String.valueOf(value)) }.map { value ⇒ value.map { case (k, v) ⇒ MDC.put(k, v); k } }.flatten diff --git a/kamon-core/src/test/scala/kamon/trace/logging/MdcKeysSupportSpec.scala b/kamon-core/src/test/scala/kamon/trace/logging/MdcKeysSupportSpec.scala new file mode 100644 index 00000000..6193f028 --- /dev/null +++ b/kamon-core/src/test/scala/kamon/trace/logging/MdcKeysSupportSpec.scala @@ -0,0 +1,44 @@ +package kamon.trace.logging + +import kamon.testkit.BaseKamonSpec +import kamon.trace.{ EmptyTraceContext, Tracer } +import org.slf4j.MDC + +class MdcKeysSupportSpec extends BaseKamonSpec("mdc-keys-support-spec") { + + "Running code with MDC support" should { + "add nothing to the MDC" when { + "the trace context is empty" in { + // Given an empty trace context. + Tracer.withContext(EmptyTraceContext) { + // When some code is executed with MDC support. + MdcKeysSupport.withMdc { + // Then the MDC should not contain the trace token. + Option(MDC.get(MdcKeysSupport.traceTokenKey)) should be(None) + // Or name + Option(MDC.get(MdcKeysSupport.traceNameKey)) should be(None) + } + } + } + } + "add the trace token and name to the context" when { + "the trace context is not empty" in { + // Given a trace context. + Tracer.withNewContext("name", Some("token")) { + // When some code is executed with MDC support. + MdcKeysSupport.withMdc { + // Then the MDC should contain the trace token. + Option(MDC.get(MdcKeysSupport.traceTokenKey)) should be(Some("token")) + // And name + Option(MDC.get(MdcKeysSupport.traceNameKey)) should be(Some("name")) + } + + // Then after code is executed the MDC should have been cleared. + Option(MDC.get(MdcKeysSupport.traceTokenKey)) should be(None) + Option(MDC.get(MdcKeysSupport.traceNameKey)) should be(None) + } + } + } + } + +} |