private static void LogWriterThreadProc() { int partnum = 0; Dictionary <string, int> msgrepeats = new Dictionary <string, int>(); while (true) { try { DeleteOldLogFiles(); LogFileName = $"{LogFileBaseName}.{partnum}.log"; using (TextWriter writer = new StreamWriter(LogFileName)) { int linenum = 0; while (true) { string msg = null; if (msgrepeats.Count < 100 && !msgrepeats.Any(m => m.Value >= 10000) && LogLineQueue.TryTake(out msg, msgrepeats.Count > 1 ? 1000 : Timeout.Infinite)) { if (msg == null) { LogLineQueueEvent.Set(); return; } else if (msgrepeats.ContainsKey(msg)) { msgrepeats[msg]++; } else { writer.WriteLine($"[{DateTime.Now.ToString("u")}] {msg}"); writer.Flush(); msgrepeats[msg] = 0; linenum++; if (linenum >= 100000) { partnum++; break; } } } else { foreach (KeyValuePair <string, int> rptkvp in msgrepeats) { if (rptkvp.Value >= 1) { writer.WriteLine($"[{DateTime.Now.ToString("u")}] {rptkvp.Key}"); if (rptkvp.Value > 1) { writer.WriteLine($"[{DateTime.Now.ToString("u")}] Last message repeated {(rptkvp.Value)} times"); } } } msgrepeats = new Dictionary <string, int>(); } } } } catch (Exception ex) { LogFileWriterException?.Invoke(ex); Thread.Sleep(30000); } } }
private static void LogWriterThreadProc() { int partnum = 0; Dictionary <string, int> msgrepeats = new Dictionary <string, int>(); while (true) { try { LogFileName = $"{LogFileBaseName}.{partnum}.log"; using (TextWriter writer = new StreamWriter(LogFileName)) { int linenum = 0; while (true) { string msg = null; if (msgrepeats.Count < 100 && !msgrepeats.Any(m => m.Value >= 10000) && LogLineQueue.TryTake(out msg, msgrepeats.Count > 1 ? 1000 : Timeout.Infinite)) { if (msg == null) { LogLineQueueEvent.Set(); return; } else if (!DisableLogDeduplication && msgrepeats.ContainsKey(msg)) { msgrepeats[msg]++; } else { var lines = msg.Split('\n'); var timestamp = DateTime.UtcNow.ToStringZulu(); foreach (var line in lines) { writer.WriteLine($"[{timestamp}] {line}"); linenum++; } writer.Flush(); msgrepeats[msg] = 0; if (linenum >= 100000) { partnum++; break; } } } else { foreach (KeyValuePair <string, int> rptkvp in msgrepeats) { if (rptkvp.Value >= 1) { writer.WriteLine($"[{DateTime.UtcNow.ToStringZulu()}] {rptkvp.Key}"); if (rptkvp.Value > 1) { writer.WriteLine($"[{DateTime.UtcNow.ToStringZulu()}] Last message repeated {(rptkvp.Value)} times"); } } } msgrepeats = new Dictionary <string, int>(); } } } } catch (ThreadAbortException) { } catch (Exception ex) { LogFileWriterException?.Invoke(ex); Thread.Sleep(30000); } } }