Flutter

[Flutter] Firebase - Crashlytics PlatformDispatcher (최종)

devyong 2024. 6. 27. 20:47

https://devyong.tistory.com/1 에서 crashlytics에 원하지않는 로그유형은 기록되지 않는 방법을 고민해봤고 테스트했다.

 

내가 원하는 이벤트 로그전송의 조건이다.

 HttpException, SocketException, HandshakeException은 파이어베이스로 로그 전송이 되지않을것.

 

실패코드 1.

FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;

FlutterError.onError = (FlutterErrorDetails details) {
   FirebaseCrashlytics.instance.recordFlutterError(details);
};

 

실패코드 2.

Isolate.current.addErrorListener(RawReceivePort((pair) async {
  final List<dynamic> errorAndStacktrace = pair;
  await FirebaseCrashlytics.instance.recordFlutterError(
    errorAndStacktrace.first,
  );
}).sendPort);

 

 

위에 두가지 실패코드는 의도적으로 Exception을 발생시키고 print()를 찍었을때, 아무것도 기록되지 않고 로그전송도 이루어지지 않았다.

의도적 Exception은 FormatException, NullPointException, RangeError를 발생시켜보았다.

 

성공코드

PlatformDispatcher.instance.onError = (error, stack) {
  print("PlatformDispatcher.instance.onError: " + error.toString());
  if (!error.toString().contains('SocketException') && !error.toString().contains('HttpException') && !error.toString().contains('HandshakeException')) {
    FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
    return true;
  } else {
    return false;
  }
};

PlatformDispatcher의 콜백을 print찍었을때 정상적으로 로그가 찍히며 파이어베이스로 에러가 전송된다.

 

error.toString()으로 몇몇 조건은 기록되지 않도록 조건문을 추가하고 종결지었다.