format method
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;
}