Base Context
You can specify items to add to every Klogging log event in your application. Examples might be application name or a build identifier.
Specify them using the Context
object, for example:
const val APP_NAME_KEY = "appName"
const val APP_NAME = "analysis-service"
const val BUILD_NUMBER_KEY = "buildNumber"
const val BUILD_NUMBER_ENV = "BUILD_NUMBER"
Context.addBaseContext(
APP_NAME_KEY to APP_NAME,
BUILD_NUMBER_KEY to System.getenv(BUILD_NUMBER_ENV),
)
Log events include those values, for example:
{
"@t": "2022-06-16T08:52:12.064882Z",
"@l": "INFO",
"@mt": "Execution time {elapsedMs} ms",
"host": "09b4396db8ae",
"appName": "analysis-service",
"buildNumber": "2.4.0-d22d0dd",
"logger": "com.wodgeworks.analysis.RunTimer",
"elapsedMs": "73",
"run": "a6f72c37-7e2f-4d69-a73f-7f493cb04d1d",
"context": "DefaultDispatcher-worker-3"
}
From other coroutine context elements
Klogging can include information from other coroutine context elements.
As an example, if your application is using Project Reactor, you can
store information in a Reactor Context
and wrap that in a coroutine ReactorContext
.
Configure Klogging to use all the values from the Reactor context in log events (EventItems
is a
convenient type alias for Map<String, Any?>
):
import io.klogging.config.Context
import io.klogging.events.EventItems
import kotlinx.coroutines.reactor.ReactorContext
val reactorExtractor: (ReactorContext) -> EventItems = { ctx ->
// TBC
}
Context.addContextItemExtractor(ReactorContext, reactorExtractor)
Any log events emitted within the scope of the Reactor context will include items returned by the
reactorExtractor()
function from that context.