handle method

  1. @override
Future<void> handle(
  1. List<Log> logs,
  2. List<Log> retryBuffer
)
override

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);
  }
}