在 Android 上,通过调用 class 作为事件源来记录 Crashlytics 事件的包装器方法

on Android, wrapper method for logging Crashlytics events with calling class as source of event

我在 Utility.class 中有一个实用方法,它是用于发送 Crashlytics 事件的包装器。

public static void logCrashlyticsEvent(String message) {
     ...
     Crashlytics.getInstance().core.logException(new Exception(message));
     ...
}

问题是每当我从另一个 class 使用它时,Crashlytics 仪表板将事件源显示为 Utility.class,如下所示:

Utility.java line 106
com.myApp.util.Utility.logCrashlyticsEvent

而不是将其显示为调用它的实际 class。

有没有办法包装对 Crashlytics 的调用,以便它仍将调用 class 显示为事件的来源?

谢谢。

编辑: 只是为了改进@Andre Classen 解决方案。

public static void logCrashlyticsEvent(HandledException e) {
    Crashlytics.getInstance().core.logException(e);
    Timber.e("Message: %s", e.getMessage());
    // More stuff
}

已处理异常:

public class HandledException extends Exception {
    public HandledException(@NonNull String message, Object... args) {
         super(String.format(message, args));
}

}

用法:

Utility.logCrashlyticsEvent(new HandledException("Cast exception, input value1: %s, value2: %s", someValue, anotherValue));

您正在创建一个新异常而不是记录源异常,因此解决方案很简单:

public static void logCrashlyticsEvent(Exception e) {
.
.
     Crashlytics.getInstance().core.logException(e);
.
.
}

使用方法:

    try{
        String s=null;
        int size=toString().length();
    }
    catch (NullPointerException e){
        com.myApp.util.Utility.logCrashlyticsEvent(e);
    }

这样异常就按照你想要的方式记录了。