2022-07-30 08:56:26 +00:00
|
|
|
package dev.inmo.kslog.common.typed
|
|
|
|
|
|
|
|
import dev.inmo.kslog.common.*
|
|
|
|
import kotlin.reflect.KClass
|
|
|
|
|
2023-11-18 11:15:23 +00:00
|
|
|
/**
|
|
|
|
* Uses [typedLoggers] [Map] to determine, where incoming __message__s should be sent. If there is no [KClass] key for
|
|
|
|
* incoming message in [typedLoggers], logger will use logger by `null` key if exists. If there is no default logger
|
|
|
|
* (by `null` key), logging will be skipped
|
|
|
|
*/
|
2022-07-30 08:56:26 +00:00
|
|
|
class TypedKSLog(
|
|
|
|
private val typedLoggers: Map<KClass<*>?, KSLog>
|
|
|
|
) : KSLog {
|
|
|
|
override fun performLog(level: LogLevel, tag: String?, message: Any, throwable: Throwable?) {
|
|
|
|
(typedLoggers[message::class] ?: typedLoggers[null]) ?.performLog(level, tag, message, throwable)
|
|
|
|
}
|
|
|
|
override fun performLog(level: LogLevel, message: Any, throwable: Throwable?) {
|
|
|
|
(typedLoggers[message::class] ?: typedLoggers[null]) ?.performLog(level, message, throwable)
|
|
|
|
}
|
|
|
|
override fun performLog(level: LogLevel, tag: String?, throwable: Throwable?, messageBuilder: () -> Any) {
|
|
|
|
val message = messageBuilder()
|
|
|
|
(typedLoggers[message::class] ?: typedLoggers[null]) ?.performLog(level, tag, message, throwable)
|
|
|
|
}
|
|
|
|
override suspend fun performLogS(level: LogLevel, tag: String?, throwable: Throwable?, messageBuilder: suspend () -> Any) {
|
|
|
|
val message = messageBuilder()
|
|
|
|
(typedLoggers[message::class] ?: typedLoggers[null]) ?.performLog(level, tag, message, throwable)
|
|
|
|
}
|
|
|
|
}
|