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()으로 몇몇 조건은 기록되지 않도록 조건문을 추가하고 종결지었다.
'Flutter' 카테고리의 다른 글
[Flutter] 대량 네트워크 이미지의 로딩 (2) | 2024.07.24 |
---|---|
[Flutter] Provider + API + MVVM 패턴 적용 (0) | 2024.07.02 |
[Flutter] InAppWebView - useShouldInterceptRequest가 발생시킨 ANR (0) | 2024.06.21 |
[Flutter] InAppWebView - 뒤로가기 (0) | 2024.06.18 |
[Flutter] Firebase - Crashlytics PlatformDispatcher (0) | 2024.06.14 |