Fix log loading
This commit is contained in:
parent
f3d43cd40a
commit
b6dad141f8
@ -96,20 +96,6 @@ public final class hep/dataforge/context/Global : hep/dataforge/context/Context
|
|||||||
public final fun getLogger ()Lhep/dataforge/context/LogManager;
|
public final fun getLogger ()Lhep/dataforge/context/LogManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class hep/dataforge/context/KLoggingManager : hep/dataforge/context/AbstractPlugin, hep/dataforge/context/LogManager {
|
|
||||||
public static final field Companion Lhep/dataforge/context/KLoggingManager$Companion;
|
|
||||||
public fun <init> ()V
|
|
||||||
public fun getTag ()Lhep/dataforge/context/PluginTag;
|
|
||||||
public fun log (Lhep/dataforge/names/Name;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
|
|
||||||
}
|
|
||||||
|
|
||||||
public final class hep/dataforge/context/KLoggingManager$Companion : hep/dataforge/context/PluginFactory {
|
|
||||||
public fun getTag ()Lhep/dataforge/context/PluginTag;
|
|
||||||
public fun getType ()Lkotlin/reflect/KClass;
|
|
||||||
public fun invoke (Lhep/dataforge/meta/Meta;Lhep/dataforge/context/Context;)Lhep/dataforge/context/KLoggingManager;
|
|
||||||
public synthetic fun invoke (Lhep/dataforge/meta/Meta;Lhep/dataforge/context/Context;)Ljava/lang/Object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract interface class hep/dataforge/context/LogManager : hep/dataforge/context/Logable, hep/dataforge/context/Plugin {
|
public abstract interface class hep/dataforge/context/LogManager : hep/dataforge/context/Logable, hep/dataforge/context/Plugin {
|
||||||
public static final field Companion Lhep/dataforge/context/LogManager$Companion;
|
public static final field Companion Lhep/dataforge/context/LogManager$Companion;
|
||||||
public static final field DEBUG Ljava/lang/String;
|
public static final field DEBUG Ljava/lang/String;
|
||||||
@ -245,6 +231,20 @@ public final class hep/dataforge/context/ResolveKt {
|
|||||||
public static final fun resolve (Lhep/dataforge/context/Context;Ljava/lang/String;Lhep/dataforge/names/Name;Lkotlin/reflect/KClass;)Ljava/lang/Object;
|
public static final fun resolve (Lhep/dataforge/context/Context;Ljava/lang/String;Lhep/dataforge/names/Name;Lkotlin/reflect/KClass;)Ljava/lang/Object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class hep/dataforge/context/SlfLogManager : hep/dataforge/context/AbstractPlugin, hep/dataforge/context/LogManager {
|
||||||
|
public static final field Companion Lhep/dataforge/context/SlfLogManager$Companion;
|
||||||
|
public fun <init> ()V
|
||||||
|
public fun getTag ()Lhep/dataforge/context/PluginTag;
|
||||||
|
public fun log (Lhep/dataforge/names/Name;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class hep/dataforge/context/SlfLogManager$Companion : hep/dataforge/context/PluginFactory {
|
||||||
|
public fun getTag ()Lhep/dataforge/context/PluginTag;
|
||||||
|
public fun getType ()Lkotlin/reflect/KClass;
|
||||||
|
public fun invoke (Lhep/dataforge/meta/Meta;Lhep/dataforge/context/Context;)Lhep/dataforge/context/SlfLogManager;
|
||||||
|
public synthetic fun invoke (Lhep/dataforge/meta/Meta;Lhep/dataforge/context/Context;)Ljava/lang/Object;
|
||||||
|
}
|
||||||
|
|
||||||
public abstract interface annotation class hep/dataforge/descriptors/Attribute : java/lang/annotation/Annotation {
|
public abstract interface annotation class hep/dataforge/descriptors/Attribute : java/lang/annotation/Annotation {
|
||||||
public abstract fun key ()Ljava/lang/String;
|
public abstract fun key ()Ljava/lang/String;
|
||||||
public abstract fun value ()Ljava/lang/String;
|
public abstract fun value ()Ljava/lang/String;
|
||||||
|
@ -19,13 +19,12 @@ kotlin {
|
|||||||
jvmMain {
|
jvmMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(kotlin("reflect"))
|
api(kotlin("reflect"))
|
||||||
api("io.github.microutils:kotlin-logging-jvm:2.0.4")
|
|
||||||
implementation("ch.qos.logback:logback-classic:1.2.3")
|
implementation("ch.qos.logback:logback-classic:1.2.3")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jsMain {
|
jsMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
api("io.github.microutils:kotlin-logging-js:2.0.4")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import kotlinx.coroutines.SupervisorJob
|
|||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
import kotlin.native.concurrent.ThreadLocal
|
import kotlin.native.concurrent.ThreadLocal
|
||||||
|
|
||||||
internal expect val globalLogger: LogManager
|
internal expect val globalLoggerFactory: PluginFactory<out LogManager>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A global root context. Closing [Global] terminates the framework.
|
* A global root context. Closing [Global] terminates the framework.
|
||||||
@ -20,7 +20,7 @@ public object Global : Context("GLOBAL".asName(), null, Meta.EMPTY) {
|
|||||||
/**
|
/**
|
||||||
* The default logging manager
|
* The default logging manager
|
||||||
*/
|
*/
|
||||||
public val logger: LogManager = globalLogger
|
public val logger: LogManager by lazy { globalLoggerFactory.invoke(context = this).apply { attach(this@Global) } }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closing all contexts
|
* Closing all contexts
|
||||||
|
@ -4,7 +4,7 @@ import hep.dataforge.misc.Named
|
|||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.plus
|
import hep.dataforge.names.plus
|
||||||
|
|
||||||
public interface Logable{
|
public interface Logable {
|
||||||
public fun log(name: Name, tag: String, body: () -> String)
|
public fun log(name: Name, tag: String, body: () -> String)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,19 +19,25 @@ public interface LogManager : Plugin, Logable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public fun Logable.trace(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.TRACE, body)
|
public fun Logable.trace(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.TRACE, body)
|
||||||
public fun Logable.info(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.INFO, body)
|
public fun Logable.info(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.INFO, body)
|
||||||
public fun Logable.debug(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.DEBUG, body)
|
public fun Logable.debug(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.DEBUG, body)
|
||||||
public fun Logable.warn(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.WARNING, body)
|
public fun Logable.warn(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.WARNING, body)
|
||||||
public fun Logable.error(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.ERROR, body)
|
public fun Logable.error(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.ERROR, body)
|
||||||
|
|
||||||
|
internal val (() -> String).safe: String
|
||||||
|
get() = try {
|
||||||
|
invoke()
|
||||||
|
} catch (t: Throwable) {
|
||||||
|
"Error while evaluating log string: ${t.message}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public fun Logable.error(throwable: Throwable?, name: Name = Name.EMPTY, body: () -> String): Unit =
|
public fun Logable.error(throwable: Throwable?, name: Name = Name.EMPTY, body: () -> String): Unit =
|
||||||
log(name, LogManager.ERROR) {
|
log(name, LogManager.ERROR) {
|
||||||
buildString {
|
buildString {
|
||||||
appendLine(body())
|
appendLine(body())
|
||||||
throwable?.let { appendLine(throwable.stackTraceToString())}
|
throwable?.let { appendLine(throwable.stackTraceToString()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,10 +52,10 @@ public val Context.logger: LogManager
|
|||||||
*/
|
*/
|
||||||
public val ContextAware.logger: Logable
|
public val ContextAware.logger: Logable
|
||||||
get() = if (this is Named) {
|
get() = if (this is Named) {
|
||||||
object :Logable{
|
object : Logable {
|
||||||
val contextLog = context.logger
|
val contextLog = context.logger
|
||||||
override fun log(name: Name, tag: String, body: () -> String) {
|
override fun log(name: Name, tag: String, body: () -> String) {
|
||||||
contextLog.log(this@logger.name + name,tag, body)
|
contextLog.log(this@logger.name + name, tag, body)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2,30 +2,28 @@ package hep.dataforge.context
|
|||||||
|
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import mu.KotlinLogging
|
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
public class KLoggingManager : AbstractPlugin(), LogManager {
|
public class ConsoleLogManager : AbstractPlugin(), LogManager {
|
||||||
|
|
||||||
override fun log(name: Name, tag: String, body: () -> String) {
|
override fun log(name: Name, tag: String, body: () -> String) {
|
||||||
val logger = KotlinLogging.logger("[${context.name}] $name")
|
val message: String = body.safe
|
||||||
when (tag) {
|
when (tag) {
|
||||||
LogManager.DEBUG -> logger.debug(body)
|
LogManager.INFO -> console.info("[${context.name}] $name: $message")
|
||||||
LogManager.INFO -> logger.info(body)
|
LogManager.WARNING -> console.warn("[${context.name}] $name: $message")
|
||||||
LogManager.WARNING -> logger.warn(body)
|
LogManager.ERROR -> console.error("[${context.name}] $name: $message")
|
||||||
LogManager.ERROR -> logger.error(body)
|
else -> console.log("[${context.name}] $name: $message")
|
||||||
else -> logger.trace(body)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val tag: PluginTag get() = Companion.tag
|
override val tag: PluginTag get() = Companion.tag
|
||||||
|
|
||||||
public companion object : PluginFactory<KLoggingManager> {
|
public companion object : PluginFactory<ConsoleLogManager> {
|
||||||
override fun invoke(meta: Meta, context: Context): KLoggingManager = KLoggingManager()
|
override fun invoke(meta: Meta, context: Context): ConsoleLogManager = ConsoleLogManager()
|
||||||
|
|
||||||
override val tag: PluginTag = PluginTag(group = PluginTag.DATAFORGE_GROUP, name = "log.kotlinLogging")
|
override val tag: PluginTag = PluginTag(group = PluginTag.DATAFORGE_GROUP, name = "log.jsConsole")
|
||||||
override val type: KClass<out KLoggingManager> = KLoggingManager::class
|
override val type: KClass<out ConsoleLogManager> = ConsoleLogManager::class
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal actual val globalLogger: LogManager = KLoggingManager().apply { attach(Global) }
|
internal actual val globalLoggerFactory: PluginFactory<out LogManager> = ConsoleLogManager
|
||||||
|
@ -2,30 +2,32 @@ package hep.dataforge.context
|
|||||||
|
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import mu.KotlinLogging
|
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
public class KLoggingManager : AbstractPlugin(), LogManager {
|
public class SlfLogManager : AbstractPlugin(), LogManager {
|
||||||
|
|
||||||
override fun log(name: Name, tag: String, body: () -> String) {
|
override fun log(name: Name, tag: String, body: () -> String) {
|
||||||
val logger = KotlinLogging.logger("[${context.name}] $name")
|
val logger = LoggerFactory.getLogger("[${context.name}] $name") //KotlinLogging.logger("[${context.name}] $name")
|
||||||
|
val message = body.safe
|
||||||
when (tag) {
|
when (tag) {
|
||||||
LogManager.DEBUG -> logger.debug(body)
|
LogManager.DEBUG -> logger.debug(message)
|
||||||
LogManager.INFO -> logger.info(body)
|
LogManager.INFO -> logger.info(message)
|
||||||
LogManager.WARNING -> logger.warn(body)
|
LogManager.WARNING -> logger.warn(message)
|
||||||
LogManager.ERROR -> logger.error(body)
|
LogManager.ERROR -> logger.error(message)
|
||||||
else -> logger.trace(body)
|
else -> logger.trace(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val tag: PluginTag get() = Companion.tag
|
override val tag: PluginTag get() = Companion.tag
|
||||||
|
|
||||||
public companion object : PluginFactory<KLoggingManager> {
|
public companion object : PluginFactory<SlfLogManager> {
|
||||||
override fun invoke(meta: Meta, context: Context): KLoggingManager = KLoggingManager()
|
override fun invoke(meta: Meta, context: Context): SlfLogManager = SlfLogManager()
|
||||||
|
|
||||||
override val tag: PluginTag = PluginTag(group = PluginTag.DATAFORGE_GROUP, name = "log.kotlinLogging")
|
override val tag: PluginTag = PluginTag(group = PluginTag.DATAFORGE_GROUP, name = "log.kotlinLogging")
|
||||||
override val type: KClass<out KLoggingManager> = KLoggingManager::class
|
override val type: KClass<out SlfLogManager> = SlfLogManager::class
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal actual val globalLogger: LogManager = KLoggingManager().apply { attach(Global) }
|
internal actual val globalLoggerFactory: PluginFactory<out LogManager> = SlfLogManager
|
||||||
|
@ -8,12 +8,8 @@ import kotlin.reflect.KClass
|
|||||||
public class NativeLogManager : AbstractPlugin(), LogManager {
|
public class NativeLogManager : AbstractPlugin(), LogManager {
|
||||||
|
|
||||||
override fun log(name: Name, tag: String, body: () -> String) {
|
override fun log(name: Name, tag: String, body: () -> String) {
|
||||||
val text = try {
|
val message: String = body.safe
|
||||||
body()
|
println("[${context.name}] $name: $message")
|
||||||
} catch (t: Throwable){
|
|
||||||
"Error while evaluating log string: ${t.message}"
|
|
||||||
}
|
|
||||||
println("[${context.name}] $name: $text")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val tag: PluginTag get() = Companion.tag
|
override val tag: PluginTag get() = Companion.tag
|
||||||
@ -26,4 +22,4 @@ public class NativeLogManager : AbstractPlugin(), LogManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal actual val globalLogger: LogManager = NativeLogManager().apply { attach(Global) }
|
internal actual val globalLoggerFactory: PluginFactory<out LogManager> = NativeLogManager
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
@file:Suppress("UNUSED_VARIABLE")
|
||||||
|
|
||||||
package hep.dataforge.workspace
|
package hep.dataforge.workspace
|
||||||
|
|
||||||
import hep.dataforge.context.*
|
import hep.dataforge.context.*
|
||||||
|
Loading…
Reference in New Issue
Block a user