handle method
Processes a batch of buffered logs.
Logs added to retryBuffer are placed back at the front of the queue
and retried with the next batch.
Implementation
@override
Future<void> handle(List<Log> logs, List<Log> retryBuffer) async {
// Батч не возвращается в retryBuffer: при недоступном диске это дало бы
// бесконечные повторы и рост памяти.
try {
await ready;
if (_disabled) return;
final lines = <String>[];
for (final log in logs) {
if (log.level < minLevel) continue;
try {
lines.add(_codec.encode(log));
} on Object catch (error, stackTrace) {
// Ошибка кодирования одного лога (бросающий toString и т.п.)
// не должна терять соседние логи батча.
_report(error, stackTrace);
lines.add(_encodeFallback(log, error));
}
}
if (lines.isNotEmpty) {
try {
await _write(lines);
} on Object catch (error, stackTrace) {
_report(error, stackTrace);
_recoverAfterWriteError();
}
}
} on Object catch (error, stackTrace) {
_report(error, stackTrace);
}
}