exportLog function

Future<int> exportLog(
  1. LogReader reader,
  2. StringSink output, {
  3. LogFilter filter = const LogFilter(),
  4. LogEntryFormat format = LogExportFormat.text,
  5. int pageSize = 500,
})

Exports the entries of reader matching filter to output, oldest to newest, one entry per LogEntryFormat.format plus a newline: for an error report or sending to support. Entries for which format returned null are skipped. Returns the number of exported entries.

Entries are read in pages of pageSize, so the whole log is not loaded into memory unless output accumulates it itself (like StringBuffer).

final file = File(path).openWrite();
await exportLog(store, file, format: LogExportFormat.jsonLines);
await file.close();

Implementation

Future<int> exportLog(
  LogReader reader,
  StringSink output, {
  LogFilter filter = const LogFilter(),
  LogEntryFormat format = LogExportFormat.text,
  int pageSize = 500,
}) async {
  var count = 0;
  LogQuery? query = LogQuery(filter: filter, limit: pageSize);
  while (query != null) {
    final page = await reader.queryEntries(query);
    for (final stored in page.entries) {
      final text = format.format(stored.entry);
      if (text == null) continue;
      output.writeln(text);
      count++;
    }
    query = page.next;
  }
  return count;
}