使用kotlin使用SLF4J或其他日志记录方法最方便的方法是什么?
通常开发人员忙于样板代码
private val logger: Logger = LoggerFactory.getLogger(this::class.java)
在每个班级中获得适当的记录器?
用Kotlin统一/简化这个的最方便的方法是什么?
解决方法
这是一个简单的示例,它从绑定的可调用引用或标准属性返回一个延迟初始化的记录器.我更喜欢从可调用引用调用,因为::表示反射(与日志记录相关).
提供Lazy< Logger>的类:
class LoggingProvider<T : Any>(val clazz: KClass<T>) { operator fun provideDelegate(inst: Any?,property: KProperty<*>) = lazy { LoggerFactory.getLogger(clazz.java) } }
inline fun <reified T : Any> KCallable<T>.logger() = LoggingProvider(T::class) inline fun <reified T : Any> T.logger() = LoggingProvider(T::class)
这是使用它们的一个例子.初始化程序中的require断言显示记录器共享一个引用:
class Foo { val self: Foo = this val logger by this.logger() val callableLogger by this::self.logger() init { require(logger === callableLogger) } }