log static method

void log(
  1. LogLevel level,
  2. String message, {
  3. Object? error,
  4. StackTrace? stackTrace,
  5. String? tag,
  6. bool asJson = true,
})

Implementation

static void log(
  LogLevel level,
  String message, {
  Object? error,
  StackTrace? stackTrace,
  String? tag,
  bool asJson = true, // default true for structured logging
}) {
  if (!enabled || level.index < minLevel.index) return;

  final time = DateTime.now().toIso8601String();
  final levelName = level.name.toUpperCase();
  final prefix = tag != null ? '[$tag]' : '';

  // Build JSON for file/cloud
  final jsonLog = jsonEncode({
    'timestamp': time,
    'level': levelName,
    'tag': tag ?? '',
    'message': message,
    'error': error?.toString(),
    'stack': stackTrace?.toString(),
  });

  // Build console-friendly message
  final consoleMessage =
      '$time [$levelName] $prefix $message${error != null ? '\n$error' : ''}${stackTrace != null ? '\n$stackTrace' : ''}';

  // Print colored console log in dev
  if (consoleLogging) {
    final color = _levelColor(level);
    print('$color$consoleMessage${ConsoleColor.reset}');
  }

  // Always write JSON to file
  _writeToFile(jsonLog);
}