如果你有多模块项目,你可以在纯 Java/Kotlin 中使用 Timber,只需要一点抽象,不需要外部库。
以 Kotlin 和 Koin 为例:
在纯 kotlin 模块中创建一个大冒名顶替者 Timber.kt:
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() }
}
现在您可以从任何地方简单地静态调用 Timber.d("message")。
如果您有 2 个以上的纯模块可以在其中使用 Timber,请考虑创建 Utils 模块并将其包含在其余模块中,以便在任何地方都可以使用。