emitLog method

  1. @override
Future<void> emitLog(
  1. LogEvent event
)
override

Performs the actual delivery of event to the transport's destination.

Called only when event.level >= this.level. Implementations must not throw; swallow or handle errors internally.

Implementation

@override
Future<void> emitLog(LogEvent event) async {
  final buffer = StringBuffer();

  // --- Header line ---
  buffer.write('${_emojis[event.level]} ');
  buffer.write('${_labels[event.level]}  ');

  if (showTimestamp) {
    buffer.write('${_formatTime(event.timestamp)}  ');
  }

  if (showContext && event.context != null) {
    buffer.write('[${event.context}] ');
  }

  buffer.write(event.message.toString());

  final headerLine = buffer.toString();

  // --- Error line ---
  String? errorLine;
  if (event.error != null) {
    errorLine = '          ↳ ${event.error}';
  }

  // --- Stack trace lines ---
  List<String>? stackLines;
  if (showStackTrace && event.stackTrace != null) {
    stackLines = event.stackTrace
        .toString()
        .trimRight()
        .split('\n')
        .map((l) => '          ↳ $l')
        .toList();
  }

  // --- Colorize ---
  String output;
  if (colorize) {
    final color = _colors[event.level]!;
    final bold = AnsiColor.bold;
    final reset = AnsiColor.reset;
    final parts = [
      '$bold$color$headerLine$reset',
      if (errorLine != null) '$color$errorLine$reset',
      if (stackLines != null)
        stackLines.map((l) => '$color$l$reset').join('\n'),
    ];
    output = parts.join('\n');
  } else {
    final parts = [
      headerLine,
      ?errorLine,
      if (stackLines != null) stackLines.join('\n'),
    ];
    output = parts.join('\n');
  }

  // ignore: avoid_print
  print(output);
}