如何告诉 Timber 哪个日志调用是针对哪个树的?
How to tell Timber which log call is for which Tree?
我有用于日志记录和与崩溃报告服务合作的 Timber 库,我的应用程序中有 Crashlytics 和 Loggly 服务。
因此,我必须种两棵树:
Timber.plant(new CrashlyticsTree());
Timber.plant(new LogglyTree(BuildConfig.LOGGLY_TOKEN));
现在,我每次打电话:
Timber.e("bla bla");
我在 Loggly 中获取了所有日志,但我希望其中一些转到 Loggly,其中一些转到 Crashlytics,那么我该怎么做?
例如,每次调用 .e
或 .w
时,都会遍历所有种植的树并调用它们各自的 .e
和 .w
实现。
这意味着如果我想将库 A 和库 B 分开,我需要为每个库使用不同的日志记录优先级。
所以我选择对图书馆 A 使用 .e
,对图书馆 B 选择 .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
我有用于日志记录和与崩溃报告服务合作的 Timber 库,我的应用程序中有 Crashlytics 和 Loggly 服务。
因此,我必须种两棵树:
Timber.plant(new CrashlyticsTree());
Timber.plant(new LogglyTree(BuildConfig.LOGGLY_TOKEN));
现在,我每次打电话:
Timber.e("bla bla");
我在 Loggly 中获取了所有日志,但我希望其中一些转到 Loggly,其中一些转到 Crashlytics,那么我该怎么做?
例如,每次调用 .e
或 .w
时,都会遍历所有种植的树并调用它们各自的 .e
和 .w
实现。
这意味着如果我想将库 A 和库 B 分开,我需要为每个库使用不同的日志记录优先级。
所以我选择对图书馆 A 使用 .e
,对图书馆 B 选择 .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