interface ILogger {
fun d(message: String)
fun e(message: String)
fun e(throwable: Throwable, message: String)
fun i(message: String)
}
object Timber: ILogger, KoinComponent {
private val logger: ILogger by inject()
override fun d(message: String) = logger.d(message)
override fun e(message: String) = logger.e(message)
override fun e(throwable: Throwable, message: String) = logger.e(throwable, message)
override fun i(message: String) = logger.i(message)
}
在应用模块中创建TimberLogger.kt:
import timber.log.Timber
class TimberLogger : ILogger {
override fun d(message: String) = Timber.d(message) // this is real timber this time
override fun e(message: String) = Timber.e(message)
override fun e(throwable: Throwable, message: String) = Timber.e(throwable, message)
override fun i(message: String) = Timber.i(message)
}
在应用模块中,将TimberLogger实现注入到您的假Timber中:
val appModule = module {
single<ILogger> { TimberLogger() }
}
4条答案
按热度按时间jxct1oxe1#
Timber依赖于android.util.Log,因此无法在纯Java模块中使用。
有人提议将库与Android分离,但库的创建者决定反对。https://github.com/JakeWharton/timber/pull/63
Timber的5.0.0-SNAPSHOT版本现在通过使用
jdk
工件支持在Java模块中使用。5lhxktic2#
如果有人在多模块Android项目中寻找Timber(无Android依赖),请使用
timber-jdk
,如下所示。在项目的
build.gradle
文件中。在单个模块
build.gradle
文件中(例如:域或远程模块)有了这个,你应该能够实现
Timber
而不依赖android框架vfwfrxfs3#
如果您有多模块项目,您可以在纯Java/Kotlin中使用Timber,只涉及一点点抽象,没有外部库。
Kotlin和Koin的示例:
在pureKotlin模块中创建一个大的冒名顶替者Timber.kt:
在应用模块中创建TimberLogger.kt:
在应用模块中,将TimberLogger实现注入到您的假Timber中:
现在您可以从任何地方静态地调用Timber.d(“message”)。
如果你有2个以上的纯模块可以使用Timber,可以考虑创建Utils模块,并将其包含在其余模块中,这样它就可以在任何地方使用。
epfja78i4#
尝试Arbor:KotlinMultiplatform的类似木材的日志记录实现。
https://github.com/ToxicBakery/Arbor