format method

  1. @override
List<String> format(
  1. BrLogRecord record
)
override

Formata record e retorna as linhas a serem escritas.

Implementation

@override
List<String> format(BrLogRecord record) {
  final color = useColors ? record.level.ansiOpen : '';
  final reset = useColors ? BrLogLevelExt.ansiClose : '';

  final lines = <String>[];

  // ── header ───────────────────────────────────────────────────────────────
  final headerParts = <String>[];
  if (showTag && record.tag.isNotEmpty) headerParts.add(record.tag);
  final headerLabel =
      headerParts.isNotEmpty ? ' ${headerParts.join(' › ')} ' : '';
  lines.add('$color┌─$headerLabel$_divider$reset');

  // ── meta line (level + time) ──────────────────────────────────────────────
  final meta = StringBuffer('│ [${record.level.label}]');
  if (showTime) meta.write(' ${_formatTime(record.time)}');
  lines.add('$color$meta$reset');

  // ── message ───────────────────────────────────────────────────────────────
  final messageLines = record.message.toString().split('\n');
  for (final l in messageLines) {
    lines.add('$color│ $l$reset');
  }

  // ── error ─────────────────────────────────────────────────────────────────
  if (record.error != null) {
    lines.add('$color│$reset');
    lines.add('$color│ ⚠ ${record.error}$reset');
  }

  // ── stack trace ───────────────────────────────────────────────────────────
  if (record.stackTrace != null) {
    final stLines = record.stackTrace.toString().trimRight().split('\n');
    final limit = stackTraceMaxLines == 0
        ? stLines.length
        : stackTraceMaxLines.clamp(0, stLines.length);
    lines.add('$color│$reset');
    for (var i = 0; i < limit; i++) {
      lines.add('$color│ ${stLines[i]}$reset');
    }
    if (limit < stLines.length) {
      lines
          .add('$color│ … (${stLines.length - limit} linhas omitidas)$reset');
    }
  }

  // ── footer ────────────────────────────────────────────────────────────────
  lines.add('$color└$_divider──$reset');

  return lines;
}