1

我在我的应用程序中使用 Timber 和DebugTree. 我想将所有消息记录到 Firebase 崩溃报告。

Timber.plant(object :  Timber.DebugTree() {
    override fun log(priority: Int, tag: String?, message: String?, t: Throwable?) {
        FirebaseCrash.logcat(priority, tag, message)
    }
})

但是现在所有消息都在 logcat 中重复,看起来像这样

11-07 17:08:07.823 V/GoogleApiClientPlugin: Connected to GooglePlayClient
11-07 17:08:07.823 V/GoogleApiClientPlugin: Connected to GooglePlayClient
11-07 17:08:07.824 V/NearbyForegroundService: connected to Google Api Client
11-07 17:08:07.824 V/NearbyForegroundService: connected to Google Api Client

我不想保护调用,if (BuildConfig.DEBUG) { ... }因为日志也应该附加到调试版本中发生的崩溃。

Fabric 具有相同的行为,但我可以将记录器设置为静默.logger(new SilentLogger()),以防止重复的日志消息。Firebase 有 API 吗?

4

1 回答 1

2

只需使用FirebaseCrash.log(String mess)方法来记录消息

这是我使用的代码:

public class FirebaseBone extends Dog.Bone {

@Override
String getTag() {
    return "Shadow";
}

@Override
protected boolean isLoggable(String tag, int priority) {
    return super.isLoggable(tag, priority);
}

@Override
protected void log(int priority, String tag, String message, Throwable t) {
    String sb = getPriority(priority) +
            (TextUtils.isEmpty(tag) ? "" : ("/" + tag)) +
            ": " +
            message;

    FirebaseCrash.log(sb);
    if (t != null) {
        FirebaseCrash.report(t);
    }
}

private String getPriority(int priority) {
    switch (priority) {
        case Log.ASSERT:
            return "A";
        case Log.DEBUG:
            return "D";
        case Log.ERROR:
            return "E";
        case Log.INFO:
            return "I";
        case Log.VERBOSE:
            return "V";
        case Log.WARN:
            return "W";
        default:
            return "?";
    }
}
}
于 2016-11-08T12:37:45.890 回答