Mar*_*tek 7 logging android slf4j kotlin slf4j-api
使用kotlin使用SLF4J或其他日志记录方法最方便的方法是什么?
通常开发人员忙于样板代码
private val logger: Logger = LoggerFactory.getLogger(this::class.java)
Run Code Online (Sandbox Code Playgroud)
在每个班级中获得适当的记录器?
用Kotlin统一/简化这个的最方便的方法是什么?
这是一个简单的示例,它从绑定的可调用引用或标准属性返回延迟初始化的记录器。我更喜欢从可调用引用进行调用,因为它::
表示反射(与日志记录相关)。
该类提供Lazy<Logger>
:
class LoggingProvider<T : Any>(val clazz: KClass<T>) {
operator fun provideDelegate(inst: Any?, property: KProperty<*>) =
lazy { LoggerFactory.getLogger(clazz.java) }
}
Run Code Online (Sandbox Code Playgroud)
调用它们的内联函数:
inline fun <reified T : Any> KCallable<T>.logger() =
LoggingProvider(T::class)
inline fun <reified T : Any> T.logger() =
LoggingProvider(T::class)
Run Code Online (Sandbox Code Playgroud)
这是使用它们的示例。初始化程序中的断言require
显示记录器共享一个引用:
class Foo {
val self: Foo = this
val logger by this.logger()
val callableLogger by this::self.logger()
init {
require(logger === callableLogger)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
309 次 |
最近记录: |