using System.Collections.Concurrent; namespace Cleanuparr.Infrastructure.Logging; /// /// Maintains a buffer of recent log entries for newly connected clients /// public class LogBuffer { private readonly ConcurrentQueue _recentLogs; private readonly int _bufferSize; public LogBuffer(int bufferSize) { _bufferSize = Math.Max(10, bufferSize); _recentLogs = new ConcurrentQueue(); } /// /// Adds a log entry to the buffer /// /// The log event to buffer public void AddLog(object logEvent) { _recentLogs.Enqueue(logEvent); // Trim buffer if it exceeds size while (_recentLogs.Count > _bufferSize && _recentLogs.TryDequeue(out _)) { } } /// /// Gets all buffered log entries /// /// Collection of recent log events public IEnumerable GetRecentLogs() => _recentLogs.ToArray(); }