TaggedLogger

@ExperimentalMiskApi
abstract class TaggedLogger<L : Any, out R : TaggedLogger<L, R>, Copyable<R>>(kLogger: KLogger, tags: Set<Tag>) : KLogger, Copyable<R>

This is a logging class to help apply and remove MDC context tags from within calls in service code.

In particular, it solves the problem with searching logs using the MDC context tags where an exception caught and thrown by misk doesn't include the MDC tags and doesn't show up in the search. Using this will mean exceptions will be visible in the sequence of logs relating to a tag. See the logging example below for usage and the logging output.

Usage:

First set up a logger class with relevant MDC functions for the code base:

data class MyServiceLogger<T: Any>(
val loggerClass: KClass<T>,
val tags: Set<Tag> = emptySet()
): TaggedLogger<T, MyServiceLogger<T>>(loggerClass, tags) {
fun processValue(value: String?) = tag("process_value" to value)

override fun copyWithNewTags(newTags: Set<Tag>): MyServiceLogger<T>
= this.copy(tags = newTags)
}

Create a global helper function to return the above class Can be called from companion objects or regular classes - will find correct logger

fun <T : Any> KClass<T>.getTaggedLogger(): MyServiceLogger<T> {
return MyServiceLogger(this)
}

Then to use the tagged logger for example:

class ServiceAction (private val webClient: WebClient): WebAction {

@Post("/api/resource")
fun executeWebAction(@RequestBody request: ServiceActionRequest) {
logger
.processValue(request.process_value)
.asContext() {
logger.info() { "Received request" }
doSomething()
}
}

private fun doSomething() {
logger.info() { "Start Process" }

client.someWebRequest() // Client throws exception to be caught and logged by misk framework

logger.info() { "Done" }
}

companion object {
val logger = this::class.getTaggedLogger()
}
}

Logging result:

Log MDC context: [process_value: PV_123] Log message: "Received request"
Log MDC context: [process_value: PV_123] Log message: "Start Process"
Log MDC context: [process_value: PV_123] Log message: "unexpected error dispatching to ServiceAction" // This log would not normally include the MDC context

Constructors

Link copied to clipboard
constructor(loggerClass: KClass<L>, tags: Set<Tag>)
constructor(kLogger: KLogger, tags: Set<Tag>)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
open override val underlyingLogger: Logger

Functions

Link copied to clipboard
fun <T> asContext(f: () -> T): T
Link copied to clipboard
@CheckReturnValue
open fun atDebug(): LoggingEventBuilder
Link copied to clipboard
@CheckReturnValue
open fun atError(): LoggingEventBuilder
Link copied to clipboard
@CheckReturnValue
open fun atInfo(): LoggingEventBuilder
Link copied to clipboard
@CheckReturnValue
open fun atLevel(p0: Level): LoggingEventBuilder
Link copied to clipboard
@CheckReturnValue
open fun atTrace(): LoggingEventBuilder
Link copied to clipboard
@CheckReturnValue
open fun atWarn(): LoggingEventBuilder
Link copied to clipboard
open override fun <T : Throwable> catching(throwable: T)
Link copied to clipboard
abstract fun copyWithNewTags(newTags: Set<Tag>): R
Link copied to clipboard
open override fun debug(msg: () -> Any?)
open override fun debug(t: Throwable?, msg: () -> Any?)
open override fun debug(marker: Marker?, msg: () -> Any?)
open override fun debug(marker: Marker?, t: Throwable?, msg: () -> Any?)
open override fun debug(p0: String)
open override fun debug(p0: String, p1: Any)
open override fun debug(p0: String, vararg p1: Any)
open override fun debug(p0: String, p1: Throwable)
open override fun debug(p0: Marker, p1: String)
open override fun debug(p0: String, p1: Any, p2: Any)
open override fun debug(p0: Marker, p1: String, p2: Any)
open override fun debug(p0: Marker, p1: String, vararg p2: Any)
open override fun debug(p0: Marker, p1: String, p2: Throwable)
open override fun debug(p0: Marker, p1: String, p2: Any, p3: Any)
Link copied to clipboard
fun KLogger.debug(vararg tags: Tag, message: () -> Any?)
fun KLogger.debug(th: Throwable, vararg tags: Tag, message: () -> Any?)
Link copied to clipboard
open override fun entry(vararg argArray: Any?)
Link copied to clipboard
open override fun error(msg: () -> Any?)
open override fun error(t: Throwable?, msg: () -> Any?)
open override fun error(marker: Marker?, msg: () -> Any?)
open override fun error(marker: Marker?, t: Throwable?, msg: () -> Any?)
open override fun error(p0: String)
open override fun error(p0: String, p1: Any)
open override fun error(p0: String, vararg p1: Any)
open override fun error(p0: String, p1: Throwable)
open override fun error(p0: Marker, p1: String)
open override fun error(p0: String, p1: Any, p2: Any)
open override fun error(p0: Marker, p1: String, p2: Any)
open override fun error(p0: Marker, p1: String, vararg p2: Any)
open override fun error(p0: Marker, p1: String, p2: Throwable)
open override fun error(p0: Marker, p1: String, p2: Any, p3: Any)
Link copied to clipboard
fun KLogger.error(vararg tags: Tag, message: () -> Any?)
fun KLogger.error(th: Throwable, vararg tags: Tag, message: () -> Any?)
Link copied to clipboard
open override fun exit()
open override fun <T> exit(result: T): T
Link copied to clipboard
open override fun getName(): String
Link copied to clipboard
open override fun info(msg: () -> Any?)
open override fun info(t: Throwable?, msg: () -> Any?)
open override fun info(marker: Marker?, msg: () -> Any?)
open override fun info(marker: Marker?, t: Throwable?, msg: () -> Any?)
open override fun info(p0: String)
open override fun info(p0: String, p1: Any)
open override fun info(p0: String, vararg p1: Any)
open override fun info(p0: String, p1: Throwable)
open override fun info(p0: Marker, p1: String)
open override fun info(p0: String, p1: Any, p2: Any)
open override fun info(p0: Marker, p1: String, p2: Any)
open override fun info(p0: Marker, p1: String, vararg p2: Any)
open override fun info(p0: Marker, p1: String, p2: Throwable)
open override fun info(p0: Marker, p1: String, p2: Any, p3: Any)
Link copied to clipboard
fun KLogger.info(vararg tags: Tag, message: () -> Any?)
fun KLogger.info(th: Throwable, vararg tags: Tag, message: () -> Any?)
Link copied to clipboard
open override fun isDebugEnabled(): Boolean
open override fun isDebugEnabled(p0: Marker): Boolean
Link copied to clipboard
open fun isEnabledForLevel(p0: Level): Boolean
Link copied to clipboard
open override fun isErrorEnabled(): Boolean
open override fun isErrorEnabled(p0: Marker): Boolean
Link copied to clipboard
open override fun isInfoEnabled(): Boolean
open override fun isInfoEnabled(p0: Marker): Boolean
Link copied to clipboard
open override fun isTraceEnabled(): Boolean
open override fun isTraceEnabled(p0: Marker): Boolean
Link copied to clipboard
open override fun isWarnEnabled(): Boolean
open override fun isWarnEnabled(p0: Marker): Boolean
Link copied to clipboard
fun KLogger.log(level: Level, vararg tags: Tag, message: () -> Any?)
fun KLogger.log(level: Level, th: Throwable, vararg tags: Tag, message: () -> Any?)
Link copied to clipboard
open fun makeLoggingEventBuilder(p0: Level): LoggingEventBuilder
Link copied to clipboard
fun KLogger.sampled(sampler: Sampler = Sampler.rateLimiting(1L)): KLogger

Returns a logger that samples logs. This logger MUST be instantiated statically, in a companion object or as a Singleton.

Link copied to clipboard
fun tag(vararg newTags: Tag): R
fun tag(newTags: Collection<Tag>): R
Link copied to clipboard
open override fun <T : Throwable> throwing(throwable: T): T
Link copied to clipboard
open override fun trace(msg: () -> Any?)
open override fun trace(t: Throwable?, msg: () -> Any?)
open override fun trace(marker: Marker?, msg: () -> Any?)
open override fun trace(marker: Marker?, t: Throwable?, msg: () -> Any?)
open override fun trace(p0: String)
open override fun trace(p0: String, p1: Any)
open override fun trace(p0: String, vararg p1: Any)
open override fun trace(p0: String, p1: Throwable)
open override fun trace(p0: Marker, p1: String)
open override fun trace(p0: String, p1: Any, p2: Any)
open override fun trace(p0: Marker, p1: String, p2: Any)
open override fun trace(p0: Marker, p1: String, vararg p2: Any)
open override fun trace(p0: Marker, p1: String, p2: Throwable)
open override fun trace(p0: Marker, p1: String, p2: Any, p3: Any)
Link copied to clipboard
fun KLogger.trace(vararg tags: Tag, message: () -> Any?)
fun KLogger.trace(th: Throwable, vararg tags: Tag, message: () -> Any?)
Link copied to clipboard
open override fun warn(msg: () -> Any?)
open override fun warn(t: Throwable?, msg: () -> Any?)
open override fun warn(marker: Marker?, msg: () -> Any?)
open override fun warn(marker: Marker?, t: Throwable?, msg: () -> Any?)
open override fun warn(p0: String)
open override fun warn(p0: String, p1: Any)
open override fun warn(p0: String, vararg p1: Any)
open override fun warn(p0: String, p1: Throwable)
open override fun warn(p0: Marker, p1: String)
open override fun warn(p0: String, p1: Any, p2: Any)
open override fun warn(p0: Marker, p1: String, p2: Any)
open override fun warn(p0: Marker, p1: String, vararg p2: Any)
open override fun warn(p0: Marker, p1: String, p2: Throwable)
open override fun warn(p0: Marker, p1: String, p2: Any, p3: Any)
Link copied to clipboard
fun KLogger.warn(vararg tags: Tag, message: () -> Any?)
fun KLogger.warn(th: Throwable, vararg tags: Tag, message: () -> Any?)