Flutter

[Flutter] Firebase - Crashlytics PlatformDispatcher

devyong 2024. 6. 14. 13:50

Crashlytics에는 모든 Exception이 전송되고있다.

 

네이티브앱의 경우, Exception은 비정상종료로 이어지고 Crashlytics에는 비정상종료 이벤트로 기록이 된다.

하지만 Flutter Zone으로 Exception이 비정상종료로 이어지지 않도록 조치를 해놨다.

 

그러다보니, Exception만 매우 많은 수치가 기록이 되었다..

심지어 NetWork.Image에서 발생한 에러들도 기록이 되고있었다.

 

예를들면, 대량의 이미지를 ListView로 노출하다가 네트워크연결 등 이슈로 이미지로딩 에러가 발생한다면

로딩중이던 이미지의 수만큼 로그가 전송된다는것이다.

 

안드로이드 네이티브 프레임워크에서는 ImageView 로딩이 실패한 경우가 Exception 로그전송이나 비정상종료로 이어지지 않아서 당황했다.

 

확인결과, 내가 짠 dart코드에서 발생한 error는 FlutterError로 기록되고 나머지는 다른 유형의 Error로 기록된다는 것이다.

(NetWrok.Image 로딩에러는 FlutterError로 기록되지 않는중)

https://pub.dev/packages/firebase_crashlytics

 

  const fatalError = true;
  // Non-async exceptions
  FlutterError.onError = (errorDetails) {
    if (fatalError) {
      // If you want to record a "fatal" exception
      FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
      // ignore: dead_code
    } else {
      // If you want to record a "non-fatal" exception
      FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
    }
  };
  // Async exceptions
  PlatformDispatcher.instance.onError = (error, stack) {
    if (fatalError) {
      // If you want to record a "fatal" exception
      FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
      // ignore: dead_code
    } else {
      // If you want to record a "non-fatal" exception
      FirebaseCrashlytics.instance.recordError(error, stack);
    }
    return true;
  };

 

 

PlatformDispatcher 로그 전송하는 부분을 주석하고 테스트시도 중이다.

Crashlytics에 내가 원하는 로그들이 찍혀서 유지보수에 큰 보템이 됐으면 좋겠다.