aboutsummaryrefslogtreecommitdiff
path: root/kamon-akka/src/test/scala/kamon/akka/instrumentation/ActorLoggingInstrumentationSpec.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-akka/src/test/scala/kamon/akka/instrumentation/ActorLoggingInstrumentationSpec.scala')
-rw-r--r--kamon-akka/src/test/scala/kamon/akka/instrumentation/ActorLoggingInstrumentationSpec.scala74
1 files changed, 74 insertions, 0 deletions
diff --git a/kamon-akka/src/test/scala/kamon/akka/instrumentation/ActorLoggingInstrumentationSpec.scala b/kamon-akka/src/test/scala/kamon/akka/instrumentation/ActorLoggingInstrumentationSpec.scala
new file mode 100644
index 00000000..143c816d
--- /dev/null
+++ b/kamon-akka/src/test/scala/kamon/akka/instrumentation/ActorLoggingInstrumentationSpec.scala
@@ -0,0 +1,74 @@
+/* ===================================================
+ * Copyright © 2013 the kamon project <http://kamon.io/>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+package kamon.instrumentation.akka
+
+import akka.actor.{ Actor, ActorLogging, Props }
+import akka.event.Logging.LogEvent
+import com.typesafe.config.ConfigFactory
+import kamon.testkit.BaseKamonSpec
+import kamon.trace.TraceLocal.AvailableToMdc
+import kamon.trace.logging.MdcKeysSupport
+import kamon.trace.{ TraceContextAware, TraceLocal, TraceContext }
+import org.scalatest.Inspectors
+import org.slf4j.MDC
+
+class ActorLoggingInstrumentationSpec extends BaseKamonSpec("actor-logging-instrumentation-spec") with Inspectors with MdcKeysSupport {
+ override lazy val config =
+ ConfigFactory.parseString(
+ """
+ |akka {
+ | loggers = ["akka.event.slf4j.Slf4jLogger"]
+ |}
+ """.stripMargin)
+
+ "the ActorLogging instrumentation" should {
+ "attach the TraceContext (if available) to log events" in {
+ val loggerActor = system.actorOf(Props[LoggerActor])
+ system.eventStream.subscribe(testActor, classOf[LogEvent])
+
+ val testTraceContext = TraceContext.withContext(newContext("logging")) {
+ loggerActor ! "info"
+ TraceContext.currentContext
+ }
+
+ fishForMessage() {
+ case event: LogEvent if event.message.toString startsWith "TraceContext" ⇒
+ val ctxInEvent = event.asInstanceOf[TraceContextAware].traceContext
+ ctxInEvent === testTraceContext
+
+ case event: LogEvent ⇒ false
+ }
+ }
+
+ "allow retrieve a value from the MDC when was created a key of type AvailableToMdc" in {
+ val testString = "Hello World"
+ TraceContext.withContext(newContext("logging-with-mdc")) {
+ TraceLocal.store(AvailableToMdc("some-cool-key"))(testString)
+
+ withMdc {
+ MDC.get("other-key") shouldBe (null)
+ MDC.get("some-cool-key") should equal(testString)
+ }
+ }
+ }
+ }
+}
+
+class LoggerActor extends Actor with ActorLogging {
+ def receive = {
+ case "info" ⇒ log.info("TraceContext(name = {}, token = {})", TraceContext.currentContext.name, TraceContext.currentContext.token)
+ }
+}