Как сказать Тимбер, какой журнал вызовов для какого дерева?

У меня есть библиотека 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
Другие вопросы по тегам