init<T> method

void init<T>({
  1. required Stream<T> rustLogStream,
  2. required FrbLogRecordData mapRecord(
    1. T record
    ),
  3. bool setupDefaultOutput = true,
  4. void disposeRustLogger()?,
})

Connects a generated Rust log stream to the Dart logging package.

Implementation

void init<T>({
  required Stream<T> rustLogStream,
  required FrbLogRecordData Function(T record) mapRecord,
  bool setupDefaultOutput = true,
  void Function()? disposeRustLogger,
}) {
  if (_state != null) {
    throw StateError('Should not initialize FRB Dart logging twice');
  }

  final defaultOutputSubscription = setupDefaultOutput
      ? _createDefaultOutputSubscription()
      : null;

  final subscription = rustLogStream.listen(
    (record) {
      final mapped = mapRecord(record);
      Logger(mapped.target).log(_toDartLevel(mapped.level), mapped.message);
    },
    onError: (Object error, StackTrace stackTrace) {
      Logger(
        'flutter_rust_bridge.logging',
      ).severe('Error in Rust log stream', error, stackTrace);
    },
  );

  _state = _FrbDartLoggingState(
    subscription: subscription,
    defaultOutputSubscription: defaultOutputSubscription,
    disposeRustLogger: disposeRustLogger,
  );
}