Как сказать Тимбер, какой журнал вызовов для какого дерева?
У меня есть библиотека Timber для регистрации и сотрудничества со службами отчетов о сбоях, и в моем приложении есть службы Crashlytics и Loggly.
Таким образом, мне пришлось посадить два дерева:
Timber.plant(new CrashlyticsTree());
Timber.plant(new LogglyTree(BuildConfig.LOGGLY_TOKEN));
Теперь каждый раз, когда я звоню:
Timber.e("bla bla");
Я получаю все журналы в Loggly, но я хочу, чтобы некоторые из них отправлялись в Loggly, а некоторые - в Crashlytics, так как мне это сделать?
1 ответ
Оказывается каждый звонок .e
или же .w
например, перебирает все посаженные деревья и вызывает их .e
а также .w
Реализации.
Это означает, что если я хотел разделить библиотеку A и библиотеку BI, необходимо было использовать разные приоритеты ведения журнала для каждого из них.
Поэтому я решил использовать .e
для библиотеки А и .w
для библиотеки Б.
Чтобы сделать это, мне пришлось создать собственные деревья, которые наследуются от Timber.HollowTree, и реализовать только необходимый вызов журнала, а остальные оставить пустыми.
public class LibraryATree extends Timber.HollowTree {
@Override
public void e(Args){
// Do something
}
}
public class LibraryBTree extends Timber.HollowTree {
@Override
public void w(Args){
// Do something
}
}
Timber.plant(new LibraryATree())
Timber.plant(new LibraryBTree())
Теперь в моем коде, если я хочу что-то зарегистрировать через LibraryA, я делаю это:
Timber.e("Test Library A"); // calls LibraryA's Tree's `.e` method
и если я хочу использовать утилиты ведения журнала библиотеки B, я делаю это:
Timber.w("Test Library B"); // calls LibraryB's Tree's `.w` method