Могу ли я использовать Timber Logger в моей библиотеке Java?

Я добавляю зависимость Timber в мой файл build.gradle модуля базовой библиотеки Java:

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

Хотя это и не выдает ошибку при синхронизации gradle, я не вижу или не использую класс Timber в Базовой библиотеке.

4 ответа

Timber зависит от android.util.Log, поэтому его нельзя использовать в чистом Java-модуле.

Было предложено отделить библиотеку от Android, но создатель библиотеки решил отказаться от нее. https://github.com/JakeWharton/timber/pull/63

Если кто-то смотрит на Timber (без зависимости от Android) для проекта android mutli-module. Использовать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

Если у вас есть многомодульный проект, вы можете использовать Timber на чистом Java/Kotlin с небольшой долей абстракции, без внешних библиотек.

Пример с Котлином и Коином:

В чистом модуле 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("сообщение") статически из любого места.

Если у вас есть 2+ чистых модуля для использования Timber, подумайте о создании модуля Utils и включите его в остальные, чтобы он был доступен везде.

Попробуйте Arbor: Timber как реализация ведения журнала для Kotlin Multiplatform.

https://github.com/ToxicBakery/Беседка

Другие вопросы по тегам