All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.malinskiy.marathon.log.MarathonLogging.kt Maven / Gradle / Ivy

There is a newer version: 0.9.1
Show newest version
package com.malinskiy.marathon.log

import ch.qos.logback.classic.Level
import ch.qos.logback.classic.Logger
import mu.KLogger
import mu.KotlinLogging

object MarathonLogging {
    var debug = true
    private var warningPrinted = false

    fun logger(func: () -> Unit): KLogger {
        return logger(level = null, func = func)
    }

    fun logger(name: String): KLogger {
        return logger(level = null, name = name)
    }

    fun logger(level: Level?, func: () -> Unit): KLogger {
        val logger = KotlinLogging.logger(func)
        return changeInternalLogLevel(logger, level = level)
    }

    fun logger(level: Level?, name: String): KLogger {
        val logger = KotlinLogging.logger(name)
        return changeInternalLogLevel(logger, level = level)
    }

    private fun changeInternalLogLevel(logger: KLogger, level: Level?): KLogger {
        val internalLogger = logger.underlyingLogger as? Logger

        if (internalLogger == null) {
            if (debug && !warningPrinted) {
                println(
                    "Can't change log level during runtime for " +
                            "${logger.underlyingLogger.javaClass.simpleName}. " +
                            "Please configure your logger separately. " +
                            "Wrapping the log and redirecting everything into warn for now"
                )
                warningPrinted = true
            }
            return KLoggerDebug(logger)
        } else {
            internalLogger.level = level
                ?: when {
                    debug -> Level.DEBUG
                    else -> Level.ERROR
                }
        }

        return logger
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy