query method

List<LogRecord> query(
  1. LogFilter filter, {
  2. int? limit,
})

Query entries matching filter, returning at most limit results.

Implementation

List<LogRecord> query(LogFilter filter, {int? limit}) {
  final all = entries;
  final results = <LogRecord>[];

  for (final record in all) {
    if (limit != null && results.length >= limit) break;

    final matches = switch (record) {
      LogSpanStart() => false, // span starts are transient, not queryable
      LogEvent event => filter.matches(
        level: event.level,
        scope: event.scope,
        tag: event.tag,
        traceId: event.traceId,
        requestId: event.requestId,
      ),
      LogSpan span => filter.matches(
        level: RpcLogLevel.info, // spans don't have a level; treat as info
        scope: span.scope,
        traceId: span.traceId,
      ),
    };

    if (matches) results.add(record);
  }

  return results;
}