log method

void log(
  1. Severity severity,
  2. String message, {
  3. Object? payload,
  4. Map<String, dynamic>? labels,
  5. StackTrace? stackTrace,
  6. bool isError = false,
  7. bool includeStacktrace = false,
  8. bool includeSourceLocation = true,
  9. List<String> packageExcludeList = const ['dart_frog', 'shelf', 'request_logger'],
})

Write a new log

Implementation

void log(
  Severity severity,
  String message, {
  Object? payload,
  Map<String, dynamic>? labels,
  StackTrace? stackTrace,
  bool isError = false,
  bool includeStacktrace = false,
  bool includeSourceLocation = true,
  List<String> packageExcludeList = const [
    'dart_frog',
    'shelf',
    'request_logger',
  ],
}) {
  final resolvedStdout = _testingStdout ?? stdout;
  final chain =
      (stackTrace != null ? Chain.forTrace(stackTrace) : Chain.current())
          .foldFrames(
    (f) => f.isCore || packageExcludeList.contains(f.package),
    terse: true,
  );
  final stackFrame = frameFromChain(
    chain,
    packageExcludeList: packageExcludeList,
  );

  Map<String, dynamic>? payloadMap;
  try {
    payloadMap = jsonDecode(jsonEncode(payload)) as Map<String, dynamic>?;
  } catch (_) {
    payloadMap = {'details': payload.toString()};
  }
  final logString = _logFormatter(
    severity: severity,
    message: message,
    headers: _headers,
    payload: payloadMap,
    labels: labels,
    isError: isError,
    chain: includeStacktrace ? chain : null,
    stackFrame: includeSourceLocation ? stackFrame : null,
  );
  resolvedStdout.writeln(logString);
}