36 lines
881 B
C#
36 lines
881 B
C#
using System.Collections.Concurrent;
|
|
|
|
namespace QFSW.QC
|
|
{
|
|
public class LogQueue : ILogQueue
|
|
{
|
|
private readonly ConcurrentQueue<ILog> _queuedLogs = new ConcurrentQueue<ILog>();
|
|
|
|
public int MaxStoredLogs { get; set; }
|
|
public bool IsEmpty => _queuedLogs.IsEmpty;
|
|
|
|
public LogQueue(int maxStoredLogs = -1)
|
|
{
|
|
MaxStoredLogs = maxStoredLogs;
|
|
}
|
|
|
|
public void QueueLog(ILog log)
|
|
{
|
|
_queuedLogs.Enqueue(log);
|
|
if (MaxStoredLogs > 0 && _queuedLogs.Count > MaxStoredLogs)
|
|
{
|
|
_queuedLogs.TryDequeue(out _);
|
|
}
|
|
}
|
|
|
|
public bool TryDequeue(out ILog log)
|
|
{
|
|
return _queuedLogs.TryDequeue(out log);
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
while (TryDequeue(out ILog _)) { }
|
|
}
|
|
}
|
|
} |