コード例 #1
0
        protected override void SendBuffer(LoggingEvent[] events)
        {
            var newEvents = events
                .ToList()
                .Where(ev => Evaluator.IsTriggeringEvent(ev))
                .ToList();

            // Se è passato l'intervallo prende il primo
            if (FlushInterval.TotalMilliseconds >= 0 && DateTime.Now - _lastFlush > FlushInterval)
            {
                newEvents = new List<LoggingEvent> {events.First()};

                // Se c'è specificato un filtro allora filtra
                if (!string.IsNullOrEmpty(IgnoreIfWordsInSubjectOrBody))
                {
                    var items = IgnoreIfWordsInSubjectOrBody.Split(',').Select(el => el.ToLower()).ToList();

                    // Se una parola è contenuta nell'oggetto o nel testo del messaggio viene scartato il messaggio
                    var filteredEvents = new List<LoggingEvent>();

                    foreach (var loggingEvent in newEvents)
                    {
                        var subject = RenderSubject(loggingEvent);
                        var message = loggingEvent.RenderedMessage;

                        if (!items.Any(el => subject.ToLower().Contains(el) && !message.ToLower().Contains(el)))
                            filteredEvents.Add(loggingEvent);
                    }

                    newEvents = filteredEvents;
                }

                if (newEvents.Count > 0)
                {
                    var subjects = newEvents.Select(RenderSubject);

                    Subject = string.Join(", ", subjects);

                    base.SendBuffer(newEvents.ToArray());

                    _lastFlush = DateTime.Now;
                }
            }
        }