using AppDiagnostic.Logging; using System.Collections.Generic; using System.Linq; namespace AppDiagnostic { public sealed class DiagnosticLogStore { private const int MaximumLogCount = 10000; private static readonly DiagnosticLogStore instance = new DiagnosticLogStore(); private readonly object syncRoot = new object(); private readonly List entries = new List(); private long totalReceived; private long version; private DiagnosticLogStore() { } public static DiagnosticLogStore Instance => instance; public long TotalReceived { get { lock (syncRoot) { return totalReceived; } } } public long Version { get { lock (syncRoot) { return version; } } } public void Add(DiagnosticLogEntry entry) { if (entry == null) { return; } lock (syncRoot) { entries.Add(entry); totalReceived++; version++; int excessCount = entries.Count - MaximumLogCount; if (excessCount > 0) { entries.RemoveRange(0, excessCount); } } } public List GetSnapshot() { lock (syncRoot) { return entries.ToList(); } } public void Clear() { lock (syncRoot) { entries.Clear(); version++; } } } }