我正试图覆盖
error()
的方法
kotlin-logging
.
下面的代码接近我想要的,但我不明白一些事情(我是Kotlin的新手)。
示例代码:
import mu.KLogger
import mu.KotlinLogging
open class BgrLogging(
private val delegate: KLogger
) : KLogger by delegate {
override fun error(msg: () -> Any?) {
delegate.error("$msg xxxx")
}
}
fun KLogger.toBgrLogging() = BgrLogging(this)
private val logger = KotlinLogging.logger {}.toBgrLogging()
我希望能够调用我的overrided
错误
方法是这样的:
logger.error("should override error")
// Output: should override error
不幸的是,这似乎跳过了我的覆盖并调用了原始
错误
在里面
科特林测井
.
如果我使用lambda:
logger.error{ "should override error" }
// Output: () -> kotlin.Any? xxxx
它调用了我的覆盖(耶!),但输出不是我想要的。
观察
当我打电话时
科特林测井
直接(没有覆盖),这两种方法似乎都如我所期望的那样起作用:
logger.error("foo1")
logger.error{ "foo1" }
它在传递字符串时输出字符串。
问题
两者都有可能吗
logger.error("xxxx")
和
logger.error{ "xxxx" }
调用我的重写函数?我希望两个调用都输出实际的字符串,而不是
() -> kotlin.Any?
.
Java 17
Kotlin Compiler Version: 1.6.10
kotlin-logging 1.5.4