我可以在我的java库上使用Timber Logger吗?

时间:2017-11-05 00:33:43

标签: android logging timber-android

我将Timber依赖项添加到我的Java核心库模块build.gradle文件中:

implementation 'com.jakewharton.timber:timber:4.6.0'

虽然gradle同步时没有出错,但我无法在核心库中看到或使用Timber类。

3 个答案:

答案 0 :(得分:4)

Timber依赖于android.util.Log,因此无法在纯Java模块中使用。

已经提出将图书馆与Android分离,但图书馆的创建者已决定反对它。 https://github.com/JakeWharton/timber/pull/63

现在,Timber的5.0.0-SNAPSHOT版本支持使用jdk工件在Java模块中使用。

<dependency>
  <groupId>com.jakewharton.timber</groupId>
  <artifactId>timber-jdk</artifactId>
  <version>5.0.0-SNAPSHOT</version>
</dependency>

答案 1 :(得分:1)

如果有人在寻找mutli-module android项目的Timber(没有android依赖)。像下面一样使用timber-jdk

在项目的build.gradle文件中。

allprojects {
    repositories {
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
    }
}

在单个模块build.gradle文件中(例如:域或远程模块)

implementation "com.jakewharton.timber:timber-jdk:5.0.0-SNAPSHOT"

有了这个,您应该能够实现Timber而不依赖于Android框架

答案 2 :(得分:1)

如果您有多模块项目,则可以在纯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模块并将其包含在其余模块中,以便随处可见。