log method

void log(
  1. LogLevel level,
  2. String message, {
  3. Map<String, dynamic>? context,
  4. Object? error,
  5. StackTrace? stackTrace,
})

Logs a message at the specified level.

Implementation

void log(
  LogLevel level,
  String message, {
  Map<String, dynamic>? context,
  Object? error,
  StackTrace? stackTrace,
}) {
  if (level.value < minLevel.value) {
    return;
  }

  final logEntry = <String, dynamic>{
    'timestamp': DateTime.now().toUtc().toIso8601String(),
    'level': level.name,
    'message': message,
  };

  if (serviceName != null) {
    logEntry['service'] = serviceName;
  }

  if (version != null) {
    logEntry['version'] = version;
  }

  // Merge default context with provided context
  final mergedContext = <String, dynamic>{
    ...defaultContext,
    if (context != null) ...context,
  };

  if (mergedContext.isNotEmpty) {
    logEntry['context'] = mergedContext;
  }

  if (error != null) {
    logEntry['error'] = error.toString();
  }

  if (stackTrace != null) {
    logEntry['stackTrace'] = stackTrace.toString();
  }

  final jsonOutput = jsonEncode(logEntry);

  if (kDebugMode) {
    debugPrint(jsonOutput);
  }
}