org.jetbrains.kotlinx.jupyter.LoggingManager.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kotlin-jupyter-kernel Show documentation
Show all versions of kotlin-jupyter-kernel Show documentation
Kotlin Jupyter kernel published as artifact
package org.jetbrains.kotlinx.jupyter
import ch.qos.logback.classic.Level
import ch.qos.logback.classic.Logger
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.spi.ILoggingEvent
import ch.qos.logback.core.Appender
import ch.qos.logback.core.OutputStreamAppender
import org.jetbrains.kotlinx.jupyter.api.KernelLoggerFactory
class LoggingManager(
loggerFactory: KernelLoggerFactory,
) {
private val rootLogger = loggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME) as? Logger
private val loggerContext
get() = rootLogger?.loggerContext
private val basicEncoder =
run {
if (loggerContext == null) return@run null
val encoder = PatternLayoutEncoder()
encoder.context = loggerContext
encoder.pattern = "%-4relative [%thread] %-5level %logger{35} - %msg %n"
encoder.start()
encoder
}
fun setRootLoggingLevel(level: Level) {
rootLogger?.level = level
}
fun disableLogging() = setRootLoggingLevel(Level.OFF)
fun mainLoggerLevel(): Level {
val mainLogger = rootLogger ?: return Level.DEBUG
return mainLogger.effectiveLevel
}
fun allLogAppenders(): List> {
val mainLogger = rootLogger ?: return emptyList()
val result = mutableListOf>()
mainLogger.iteratorForAppenders().forEachRemaining { result.add(it) }
return result
}
fun addAppender(
name: String,
appender: Appender,
) {
if (loggerContext == null || basicEncoder == null) return
appender.name = name
appender.context = loggerContext
(appender as? OutputStreamAppender)?.encoder = basicEncoder
appender.start()
rootLogger?.addAppender(appender)
}
fun removeAppender(appenderName: String) {
rootLogger?.detachAppender(appenderName)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy