LoggingManager.kt
package com.hexagonkt.core.logging
import kotlin.reflect.KClass
/**
* Manages Logs using [PrintLoggingAdapter]
*/
object LoggingManager {
var useColor: Boolean = true
var adapter: LoggingPort = PrintLoggingAdapter()
var defaultLoggerName: String = "com.hexagonkt.core.logging"
set(value) {
require(value.isNotEmpty()) { "Default logger name cannot be empty string" }
field = value
}
/**
* Set a logger logging level by name.
*
* @param name Logger name.
* @param level One of the logging levels identifiers, e.g., TRACE
*/
fun setLoggerLevel(name: String, level: LoggingLevel) {
adapter.setLoggerLevel(name, level)
}
/**
* Set a logging level for a logger with a class name.
*
* @param type Class type.
* @param level One of the logging levels identifiers, e.g., TRACE
*/
fun setLoggerLevel(type: KClass<*>, level: LoggingLevel) {
setLoggerLevel(qualifiedName(type), level)
}
/**
* Set a logger logging level for a logger with a default name.
*
* @param level One of the logging levels identifiers, e.g., TRACE
*/
fun setLoggerLevel(level: LoggingLevel) {
setLoggerLevel("", level)
}
/**
* Check if a logging level is enabled for a logger.
*
* @param name Logger name.
* @param level One of the logging levels identifiers, e.g., TRACE
* @return True if the supplied level is enabled for the passed logger name.
*/
fun isLoggerLevelEnabled(name: String, level: LoggingLevel): Boolean =
adapter.isLoggerLevelEnabled(name, level)
/**
* Check if a logging level is enabled for a logger with an instance.
*
* @param instance class instance.
* @param level One of the logging levels identifiers, e.g., TRACE
* @return True if the supplied level is enabled for the passed logger name.
*/
fun isLoggerLevelEnabled(instance: Any, level: LoggingLevel): Boolean =
isLoggerLevelEnabled(instance::class, level)
/**
* Check if a logging level is enabled for a logger with a class name.
*
* @param type Class type.
* @param level One of the logging levels identifiers, e.g., TRACE
* @return True if the supplied level is enabled for the passed logger name.
*/
fun isLoggerLevelEnabled(type: KClass<*>, level: LoggingLevel): Boolean =
isLoggerLevelEnabled(qualifiedName(type), level)
/**
* Check if a logging level is enabled for the root logger.
*
* @param level One of the logging levels identifiers, e.g., TRACE
* @return True if the supplied level is enabled for the passed logger name.
*/
fun isLoggerLevelEnabled(level: LoggingLevel): Boolean =
isLoggerLevelEnabled("", level)
private fun qualifiedName(type: KClass<*>): String =
type.qualifiedName ?: error("Cannot get qualified name of type")
}