重命名 crashlytics 上的错误

Rename errors on crashlitics

我有一个项目,其中所有错误和警告都写在 classes 发生的日志中。我开始使用 crashlytics。并尝试将所有连接到日志记录和错误的逻辑组合到特定的 class。并强制这个 class 决定在哪里报告错误(错误+警告)以及在哪里记录警告。但是当我完成它时,我开始收到所有错误,因为它们发生在 class 中。是否可以重命名错误?例如,在报告中手动添加 activity 名称,这样我将始终收到不同的错误而不是相同的错误。跟图片不一样

    class AppLogs {
        companion object CrashReport {
            private fun reportToCrashlytics(
                errorMessage: String,
                user: String = "user id",
                log: String = "log",
                additionalInfoTitle: String = "title",
                additionalInfoMessage: String = " message"
            ) {
                FirebaseCrashlytics.getInstance().log(log)
                FirebaseCrashlytics.getInstance().setUserId(user)
                FirebaseCrashlytics.getInstance()
                    .setCustomKey(additionalInfoTitle, additionalInfoMessage)
                FirebaseCrashlytics.getInstance().recordException(throw Exception(errorMessage))
            }
    
            private fun reportLog(errorMessage: String) {
                Timber.e(errorMessage)
            }
    
            fun report(errorMessage: String, errorType: Char) {
                if (errorType == 'e') {
                    reportLog(errorMessage)
                    reportToCrashlytics(errorMessage)
                } else {
                    reportLog(errorMessage)
                }
            }
        }
    }

实际问题的答案

... manually add activity name in the report so I will get different errors and not the same error all the time ...

答案很简短 - 不,这是不可能的(不付出巨大的努力)。

但是为什么呢?

Crashlytics 使用报告的可抛出对象的堆栈跟踪。使用此堆栈使我们能够获得跟踪异常发生的行的报告。

这意味着要在问题列表中创建另一个问题记录,您必须修改可抛出对象的堆栈跟踪。

TrimmedThrowableData 是收集堆栈跟踪数据报告的 class。如您所见,它获得了 throwable 的未修改堆栈跟踪。

很可能是唯一的解决方案

如果您想获得不同的堆栈跟踪 - 在使用 reportToCrashlytics 的地方创建 Exception 对象并将这些对象作为参数传递。或者抛出并捕获异常,并报告捕获到的异常。


上一个答案(发现错误)

您正在抛出导致应用程序崩溃的异常。您应该创建 Exception 对象并将其作为参数传入。

如果您打开 IDE,您将看到使用 throw 的行突出显示了 recordException 方法,如果将光标悬停在它上面,您将看到以下内容:

这意味着你永远不会执行 recordException 因为参数是先计算然后传递给函数的。但该功能永远无法实现,因为 throw 使应用程序崩溃。

不要使用throw关键字:

FirebaseCrashlytics.getInstance().recordException(Exception(errorMessage))

您可以像这样更改您的堆栈跟踪:

public class CustomException extends Exception {

public CustomException(String message, int lineNumber) {
    super(message);
    StackTraceElement[] stackTrace = getStackTrace();
    StackTraceElement[] newStackTrace = new StackTraceElement[stackTrace.length + 1];
    System.arraycopy(stackTrace, 0, newStackTrace, 1, stackTrace.length);
    newStackTrace[0] = new StackTraceElement("className", "methodName", "fileName", lineNumber);
    setStackTrace(newStackTrace);
}
}