-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Now, it is impossible to create a logger from main method:
fun main() {
val logger = LoggingFactory.forEnclosingClass()
logger.atInfo().log { "..." }
}The snippet above fails with the following exception:
Exception in thread "main" java.lang.UnsupportedOperationException: Packages and file facades are not yet supported in Kotlin reflection. Meanwhile please use Java reflection to inspect this class: class logging.test.AppKt
Full stack trace
Exception in thread "main" java.lang.UnsupportedOperationException: Packages and file facades are not yet supported in Kotlin reflection. Meanwhile please use Java reflection to inspect this class: class logging.test.AppKt
at kotlin.reflect.jvm.internal.KClassImpl.reportUnresolvedClass(KClassImpl.kt:310)
at kotlin.reflect.jvm.internal.KClassImpl.access$reportUnresolvedClass(KClassImpl.kt:44)
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:56)
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:48)
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93)
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
at kotlin.reflect.jvm.internal.KClassImpl$Data.getDescriptor(KClassImpl.kt:48)
at kotlin.reflect.jvm.internal.KClassImpl$Data$annotations$2.invoke(KClassImpl.kt:59)
at kotlin.reflect.jvm.internal.KClassImpl$Data$annotations$2.invoke(KClassImpl.kt:59)
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93)
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
at kotlin.reflect.jvm.internal.KClassImpl$Data.getAnnotations(KClassImpl.kt:59)
at kotlin.reflect.jvm.internal.KClassImpl.getAnnotations(KClassImpl.kt:184)
at io.spine.logging.LoggingDomainClassValue.computeValue(LoggingDomainClassValue.kt:104)
at io.spine.logging.LoggingDomainClassValue.computeValue(LoggingDomainClassValue.kt:46)
at java.base/java.lang.ClassValue.getFromHashMap(ClassValue.java:228)
at java.base/java.lang.ClassValue.getFromBackup(ClassValue.java:210)
at java.base/java.lang.ClassValue.get(ClassValue.java:116)
at io.spine.logging.LoggingDomainClassValue.get$logging(LoggingDomainClassValue.kt:50)
at io.spine.logging.LoggingFactory.loggingDomainOf(LoggingFactory.kt:53)
at io.spine.logging.Logger.at(Logger.kt:58)
at io.spine.logging.Logger.atInfo(Logger.kt:100)
at logging.test.AppKt.main(App.kt:16)
at logging.test.AppKt.main(App.kt)
Although, it doesn't seem very useful in production code, such usage is important. main is often used to create code snippets, quickly try out a new library (e.g., logging library!), test something, etc.
So, I suggest either adding of LoggingFactory.anonymousLogger() or allow LoggingFactory.forEnclosingClass() create loggers for ephemeral Kotlin classes (in the example above, it is AppKt class).
Metadata
Metadata
Assignees
Labels
No labels