logger method

  1. @visibleForTesting
  2. @protected
dynamic logger(
  1. String message, {
  2. LogExtra? logExtra,
  3. DateTime? time,
  4. int? sequenceNumber,
  5. int level = 0,
  6. String? name,
  7. Zone? zone,
  8. Object? error,
  9. StackTrace? stackTrace,
  10. @Deprecated('ignore this, always true') bool uriFrame = true,
})

logExtra print stack frame info name logger.name null: and if logExtra ==null: will use 'runtimeType' else: will use stack frame info stackTrace will print with red color by dev.log but if error == null: will ignore stackTrace

Implementation

@visibleForTesting
@protected
logger(
  String message, {
  LogExtra? logExtra,
  DateTime? time,
  int? sequenceNumber,
  int level = 0,
  String? name,
  Zone? zone,
  Object? error,
  StackTrace? stackTrace,
  @Deprecated('ignore this, always true') bool uriFrame = true,
}) {
  if (logExtra != null) {
    try {
      final t = Trace.from(stackTrace ?? StackTrace.current);
      if (error == null) stackTrace = null; // ignore SkipError's red trace
      final fms0 = t.terse.frames;
      final fms1 = fms0.where(
        (f) =>
            !_kExcludedPackages.contains(f.package) &&
            // for `xx_test.dart`
            (f.package != null || f.uri.scheme == 'file'),
      );
      // print('DEBUG fms1 ${fms1.join('\n\t')}');
      if (fms1.isNotEmpty) {
        name = fms1.first.member;
        final fm = switch (logExtra) {
          LogExtra.inner => fms1.firstOrNull,
          LogExtra.self => fms1.skip(1).firstOrNull,
          LogExtra.outer => fms1.lastOrNull,
          LogExtra.all => null,
        };
        final locations =
            fm?.location ?? fms1.map((f) => f.location).join('\n\t');
        message = '$message #> $locations';
      } else {
        final tips =
            '\t----- DEV TIPS:'
            "\tCan't show correct invoke location. Try add 'await' for VM::update method\n"
            '\t${fms0.join('\n\t')}';
        message = '$message #> \n$tips';
      }
    } catch (e, s) {
      frPrint("FlowR LOGGER ERROR $e; \n$s");
    }
  }
  frPrint(
    message,
    time: time,
    sequenceNumber: sequenceNumber,
    level: level,
    name: name ?? '$runtimeType',
    zone: zone,
    error: error,
    stackTrace: stackTrace,
  );
}