Lightweight Multiplatform logging framework for Kotlin. A convenient and performant logging facade.
OTHER License
Lightweight Multiplatform logging framework for Kotlin, written in . A convenient and performant logging facade.
logger.debug { "Some $expensive message!" }
Behind the scenes the expensive message do not get evaluated if debug is not enabled:
// This is what happens when you write the above ^^^
if (logger.isDebugEnabled) logger.debug("Some $expensive message!")
// Place definition above class declaration to make field static
private val logger = KotlinLogging.logger {}
Behind the scenes val logger
will be created in the class, with the class/file name:
// This is what happens when you write the above ^^^
val logger = LoggerFactory.getLogger("package.ClassName")
// exception as first parameter with message as lambda
logger.error(exception) { "a $fancy message about the $exception" }
logger.atWarn {
message = "foo $bar"
cause = exception
payload = buildMap(capacity = 3) {
put("foo", 1)
put("bar", "x")
put("obj", Pair(2, 3))
}
}
import io.github.oshai.kotlinlogging.KotlinLogging
private val logger = KotlinLogging.logger {}
class FooWithLogging {
val message = "world"
fun bar() {
logger.debug { "hello $message" }
}
}
Version 5 is not backward compatible with previous versions (v.3, v.2, v.1). Group id (in maven) and packages names changed. It is possible to use both version 5 and previous versions side-by-side so some of the code from the old version and some new. It is also possible to have libs using old version and use the new version (and vice-versa). In that sense it's a completely new dependency.
Main changes are:
io.github.microutils
-> io.github.oshai
.mu
-> io.github.oshai.kotlinlogging
.More details in issue #264, and in the change log
Important note: kotlin-logging depends on slf4j-api (in the JVM artifact). In runtime, it is also required to depend on a logging implementation. More details in how-to-configure-slf4j. And an excellent detailed explanation in a-guide-to-logging-in-java. In version 5 users should also provide slf4j-api dependency.
In short, if you just want to log statements to stdout, it's possible to add the following dependency: org.slf4j:slf4j-simple:2.0.3
.
<dependency>
<groupId>io.github.oshai</groupId>
<artifactId>kotlin-logging-jvm</artifactId>
<version>7.0.0</version>
</dependency>
See the full example in kotlin-logging-example-maven.
implementation 'io.github.oshai:kotlin-logging-jvm:7.0.0'
Alternatively, download the JAR from github or maven-central.
An experimental multiplatform support is available. More information is available on the wiki and issues #21 #45.
After seeing many questions like Idiomatic way of logging in Kotlin and Best practices for loggers, it seems like there should be a standard for logging and obtaining a logger in Kotlin. kotlin-logging provides a wrapper for slf4j-api to be used by Kotlin classes with the following advantages:
{}
.And many more... (add your name above)
logger.debug
, my IntelliJ IDEA run console doesn't show any output. Do you know how I could set the console logger to debug or trace levels? Is this an IDE setting, or can it be set in the call to KLogging()? Setting log level is done per implementation. kotlin-logging and slf4j are just facades for the underlying logging lib (log4j, logback etc') more details here.DelegatingKLogger.underlyingLogger
property.It is possible to configure IntelliJ live templates. For file level logger configure the following:
private val logger = io.github.oshai.kotlinlogging.KotlinLogging.logger {}
.Kotlin: top-level
.Any contribution is appreciated. See the contributors list in: https://github.com/oshai/kotlin-logging/graphs/contributors
Pull requests are welcome! See instructions in https://github.com/oshai/kotlin-logging/blob/master/CONTRIBUTING.md.