The kamon-logback module requires you to start your application using the AspectJ Weaver Agent.
Kamon Logback is currently available for Scala 2.10, 2.11 and 2.12.
Supported releases and dependencies are shown below.
kamon | status | jdk | scala |
---|---|---|---|
1.0.0 | stable | 1.8+ | 2.10, 2.11, 2.12 |
To get started with SBT, simply add the following to your build.sbt
or pom.xml
file:
libraryDependencies += "io.kamon" %% "kamon-logback" % "1.0.2"
<dependency>
<groupId>io.kamon</groupId>
<artifactId>kamon-logback_2.12</artifactId>
<version>1.0.0</version>
</dependency>
Inserting a conversionRule
allows you to incorporate the trace ID for a request into your Logback layout. Here is a simple example logback.xml
configuration that does this:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false" debug="false">
<conversionRule conversionWord="traceID" converterClass="kamon.logback.LogbackTraceIDConverter" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} | %-5level | %traceID | %c{0} -> %m%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
If you choose to use AsyncAppender
, your trace ID will automatically be propagated to the thread where the log is actually published. No configuration needed. The same applies for the span ID. You can use them in the logback pattern like this:
<pattern>%d{yyyy-MM-dd HH:mm:ss} | %-5level | %X{kamonTraceID} | %X{kamonSpanID} | %c{0} -> %m%n</pattern>
You can also add custom values to MDC. To do this, simply add the key value in the library configuration:
kamon.logback.mdc-traced-local-keys = [ userID ].
kamon.logback.mdc-traced-broadcast-keys = [ requestID ]
Then, add the value to the kamon context:
Context
.create(Span.ContextKey, span)
.withKey(Key.broadcastString("userID"), Some("user-1"))
.withKey(Key.local[Option[String]("requestID", None), Some("request-id") {
// loggers called in this context will have access to the userID, requestID
}
Note: While in Kamon you can have one local key and one broadcast key with the same name, in MDC this is not possible. In this case only the broadcast key will be stored in MDC (will be present in the logs)