Можно ли выбрать конкретное дерево тимберса во время выполнения?
Давайте предположим, что я хотел бы иметь приложение с различными регистраторами для каждой части моей логики, то есть ConsoleLogger для общих сообщений и HttpLogger для просто удаленного взаимодействия.
Я видел, что Timber позволяет создавать различные регистраторы, начиная с Timber.Tree. Затем можно решить, какой регистратор использовать, полагаясь на вариант Android (DEBUG vs RELEASE), изменив метод onCreate дочернего класса вашего собственного приложения. Кроме того, можно настроить Timber для использования одного или другого регистратора, играя с уровнем ведения журнала (d, i, w и т. Д.).
Теперь мой вопрос: можно ли сказать Timber во время выполнения, какое дерево использовать? Если это помогает, я пытаюсь сделать что-то похожее на то, как logback-android делает с slf4j:
org.slf4j.Logger log = LoggerFactory.getLogger(MainActivity.class);
3 ответа
Вы можете иметь любое количество одновременно работающих регистраторов. Так что разные реализации могут делать разные вещи в d, i, v
журналы. Если вам действительно нужно остановить запуск одного регистратора во время выполнения, вы можете использовать uproot(Tree tree)
или же uprootAll()
методы удаления деревьев журналирования. И если бы вы еще не добавили свой новый, вы бы использовали plant(Tree... trees)
,
Я бы посоветовал обращаться с этим иначе, чем постоянно возиться с деревьями.
Если хочешь
abstract class RemoteLoggerTree : Timber.Tree() {
companion object {
const val TAG_HTTP_LOG = "TAG_HTTP_LOG"
}
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
if (tag != TAG_HTTP_LOG) {
return
}
// log your stuff here as usual
}
}
Затем на сайте вызова вам просто нужно установить тег перед ведением журнала, как это. Он будет применяться только к одному вызову журнала.
Timber.tag(TAG_HTTP_LOG)
Timber.d("Your message goes here and will be logged in the HTTP logger")
Если вы не хотите, чтобы журналы дублировались двумя регистраторами, вы можете сделать противоположное для регистраторов, которым не нужно регистрировать эти сообщения с тегами.
Проверять , выписываться
Timber.forest()
, это возвращает коллекцию всех посаженных деревьев.