示例#1
0
 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;
         }
     }
 }
示例#2
0
        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());
        }
示例#4
0
        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;
        }