android – 方便的Kotlin LoggerFactory简化

使用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)
  }

}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...