10

モバイルアプリケーションのGoogleAnalyticのレポートにスタックトレース全体を含めたいと思います。

スタックトレースを出力して文字列に入れるクラスを作成しましたが、機能しません。

私の習慣ExceptionParser

@Override
public String getDescription(String threadName, Throwable throwable) {
    return threadName + " " + getStackTrace(throwable);
}

private String getStackTrace(Throwable throwable) {
    final Writer result = new StringWriter();
    final PrintWriter printWriter = new PrintWriter(result);
    throwable.printStackTrace(printWriter);

    return result.toString();
}

そして、私はそれを次のように設定しました:

EasyTracker.getTracker().setExceptionParser(new StacktraceExceptionParser());
4

3 に答える 3

6

以下の方法では、スタックトレース全体を1つのコンマ区切り行に結合します。これは、Analyticsが最初の行だけを返す場合に役立ちます。ただし、まだ長さの制限がある可能性があるため、不要なアイテムを削除するためにフィルタリングを実行するのが賢明かもしれません(コメントを参照)

 public String getCombinedStackTrace(Throwable aThrowable) {

    final StringBuilder result = new StringBuilder();
    result.append(aThrowable.toString());
    result.append(',');

    String oneElement;

    for (StackTraceElement element : aThrowable.getStackTrace() ) {
        // you can do some filtering here, selecting only the elements you need
        oneElement = element.toString();
        result.append( oneElement );
        result.append( ",");
    }
    return result.toString();
}

エラー報告ライブラリの使用に関するNikolayの2番目のコメント。私はそれが非常に役立つことがわかりました。

于 2012-12-08T04:56:39.303 に答える
6

私はこのスレッドが古いことを知っていますが、これを機能させる方法を理解しようとしていますが、完全を期すために、ログにはあなたが望むことを行う便利な方法があります

String stackTraceStr = Log.getStackTraceString(exception);

編集:100文字制限コメントへの対応

実際、うまくEasyTracker.getTracker().setExceptionParser(...)いくとは思わないので、ここのブログ投稿をたどりましたhttp://dandar3.blogspot.co.uk/2013/03/google-analytics-easytracker-detailed.html

ブログ投稿の重要なポイントは、GA 例外ハンドラーで ExceptionParser を設定することです。

// Make sure you set the context on EasyTracker first
EasyTracker.getInstance().setContext(this);

// As in in the blog post, we have to get the ExceptionReporter
// in order to set the ExceptionParser
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
if (uncaughtExceptionHandler instanceof ExceptionReporter) {
  ExceptionReporter exceptionReporter = (ExceptionReporter) uncaughtExceptionHandler;
  exceptionReporter.setExceptionParser(new AnalyticsExceptionParser());
}

これは私にとってはうまくいき、100文字を超えるログが記録されました。

于 2013-04-04T10:34:11.683 に答える
4

Analytics により、送信できるメッセージのサイズが制限されている場合があります。代わりに、 ACRABugSenseなどの実際のエラー報告ライブラリを使用することをお勧めします。デバイス情報、構成の詳細、より優れたエラー報告 (同じトレースがある場合に複数の例外を組み合わせるなど) などの追加機能を利用できます。

于 2012-12-05T08:56:44.683 に答える