주요 콘텐츠로 건너뛰기

로깅 및 오류 보고

Riverpod은 기본적으로 provider 트리에서 발생하는 모든 이벤트를 수신하는 방법을 제공합니다.
이 기능은 모든 이벤트를 기록하거나 원격 서비스에 오류를 보고하는 데 사용할 수 있습니다.

이는 ProviderObserver 클래스를 사용하고 이를 ProviderScope/ProviderContainer에 전달하면 됩니다.

ProviderObserver 정의하기

ProviderObserver는 확장(extend)해야 하는 클래스입니다.
이벤트를 수신하기 위해 재정의할 수 있는 다양한 메서드를 제공합니다:

  • didAddProvider, provider가 트리에 추가(added)될때 호출
  • didUpdateProvider, provider가 갱신(updated)될때 호출
  • didDisposeProvider, provider가 폐기(disposed)될때 호출
  • providerDidFail, synchronous provider가 에러를 던질때 호출
class MyObserver extends ProviderObserver {

void didAddProvider(
ProviderBase<Object?> provider,
Object? value,
ProviderContainer container,
) {
print('Provider $provider was initialized with $value');
}


void didDisposeProvider(
ProviderBase<Object?> provider,
ProviderContainer container,
) {
print('Provider $provider was disposed');
}


void didUpdateProvider(
ProviderBase<Object?> provider,
Object? previousValue,
Object? newValue,
ProviderContainer container,
) {
print('Provider $provider updated from $previousValue to $newValue');
}


void providerDidFail(
ProviderBase<Object?> provider,
Object error,
StackTrace stackTrace,
ProviderContainer container,
) {
print('Provider $provider threw $error at $stackTrace');
}
}

ProviderObserver 사용하기

이제 옵저버(observer)를 정의했으니 이를 사용해야 합니다.
그러기 위해서는 ProviderScope 또는 ProviderContainer에 전달해야 합니다:

runApp(
ProviderScope(
observers: [
MyObserver(),
],
child: MyApp(),
)
);
final container = ProviderContainer(
observers: [
MyObserver(),
],
);