createStructuredLog function

String createStructuredLog(
  1. Object message,
  2. LogSeverity severity, {
  3. Map<String, Object?>? payload,
  4. String? traceparent,
  5. Zone? zone,
  6. StackTrace? stackTrace,
  7. String? projectId,
})

Formats a log entry for Google Cloud structured logging on stdout.

Conforms to Google Cloud's structured logging JSON schema.

If message is a Map, its entries are included at the top level of the output JSON payload (excluding reserved fields like severity). Otherwise, it is stored under the "message" key.

Implementation

String createStructuredLog(
  Object message,
  LogSeverity severity, {
  Map<String, Object?>? payload,
  String? traceparent,
  Zone? zone,
  StackTrace? stackTrace,
  String? projectId,
}) {
  final messageMap = switch (message) {
    '' => <String, Object?>{},
    Map() => _filterReservedMembers(message),
    _ => {'message': message},
  };

  final result = <String, Object?>{
    ...messageMap,
    ...(payload ?? {}),
    'severity': severity.value,
    ...(traceparent == null
        ? structuredTraceFromZone(projectId, zone)
        : formatTraceparent(projectId, traceparent)),
    if (stackTrace case final stackTrace?) ...{
      'stack_trace': _formatStackTrace(stackTrace).toString(),
      'logging.googleapis.com/sourceLocation': _sourceLocation(stackTrace),
    },
  };

  return jsonEncode(sanitize(result));
}