protected void OnMessage(string message, bool isStderr) { if (LastLogEntry == null) { LastLogEntry = new LogBufferEntry() { Count = 1, Message = message, Type = isStderr ? EventLogEntryType.Error : EventLogEntryType.Information, LastHitTime = DateTime.Now, }; } else { if (string.Equals(LastLogEntry.Message, message, StringComparison.Ordinal)) { LastLogEntry.Count++; LastLogEntry.LastHitTime = DateTime.Now; } else { FlushLogBufferTimer.Enabled = false; CommitLog(); FlushLogBufferTimer.Enabled = true; } } }
public LogBufferEntry[] Peek(int maxValueBytesHint) { var entries = new List <LogBufferEntry>(); var entriesBytes = 0; foreach (var current in _entries) { var entry = new LogBufferEntry { Key = current.Key, Value = current.Value }; entriesBytes += entry.Value.Length; if (entries.Count != 0 && entriesBytes > maxValueBytesHint) { break; } entries.Add(entry); } return(entries.ToArray()); }
public LogBufferEntry[] Peek(int maxValueBytesHint) { var result = new List <LogBufferEntry>(); var entriesBytes = 0; var done = false; foreach (var current in _entries) { var entry = new LogBufferEntry { Key = current.Key, Value = current.Value }; entriesBytes += entry.Value.Length; if (result.Count != 0 && entriesBytes > maxValueBytesHint) { done = true; break; } result.Add(entry); } if (!done && _enumerator != null) { while (_enumerator.MoveNext()) { var entry = new LogBufferEntry { Key = _nextId++, Value = _enumerator.Current }; _entries.Add(entry.Key, entry.Value); entriesBytes += entry.Value.Length; if (result.Count != 0 && entriesBytes > maxValueBytesHint) { done = true; break; } result.Add(entry); } if (!done) { _enumerator.Dispose(); _enumerator = null; } } return(result.ToArray()); }
protected void CommitLog() { System.Diagnostics.Debug.WriteLine("Commiting log"); if (LastLogEntry == null) { return; } if (LastLogEntry.Count > 1) { EventLog.WriteEntry(EventSourceName, $"[Repeated {LastLogEntry.Count} times in {(DateTime.Now - LastLogEntry.LastHitTime).TotalSeconds} seconds] {LastLogEntry.Message}", LastLogEntry.Type); } else { EventLog.WriteEntry(EventSourceName, LastLogEntry.Message, LastLogEntry.Type); } LastLogEntry = null; }