public bool ShouldLog(ILogEntry logEntry) { int key = logEntry.GetThrottlingHashCode(); if (_minEventThreshold <= 1 && _minInterval == TimeSpan.Zero) { return true; } bool toReturn = true; lock (_lockObject) { if (_lastTimeLogged.ContainsKey(key)) { if (_minEventThreshold <= 1 && _minInterval != TimeSpan.Zero) { if (_lastTimeLogged[key].LastTimeLogged.Add(_minInterval) > DateTime.Now) { RuleTracker tracker = _lastTimeLogged[key]; tracker.MessagesSkippedSinceLastLog += 1; _lastTimeLogged[key] = tracker; toReturn = false; } else { logEntry.ExtendedProperties.Add("ThrottledMessagesSkippedSinceLastLog", _lastTimeLogged[key].MessagesSkippedSinceLastLog.ToString()); _lastTimeLogged[key] = new RuleTracker(DateTime.Now, 0); } } else if (_minEventThreshold > 1 && _minInterval == TimeSpan.Zero) { if (_lastTimeLogged[key].MessagesSkippedSinceLastLog < _minEventThreshold - 1) { RuleTracker tracker = _lastTimeLogged[key]; tracker.MessagesSkippedSinceLastLog += 1; _lastTimeLogged[key] = tracker; toReturn = false; } else { logEntry.ExtendedProperties.Add("ThrottledMessagesSkippedSinceLastLog", _lastTimeLogged[key].MessagesSkippedSinceLastLog.ToString()); _lastTimeLogged[key] = new RuleTracker(DateTime.Now, 0); } } else if (_minEventThreshold > 1 && _minInterval != TimeSpan.Zero) { if (_lastTimeLogged[key].LastTimeLogged.Add(_minInterval) > DateTime.Now && _lastTimeLogged[key].MessagesSkippedSinceLastLog < _minEventThreshold - 1) { RuleTracker tracker = _lastTimeLogged[key]; tracker.MessagesSkippedSinceLastLog += 1; _lastTimeLogged[key] = tracker; toReturn = false; } else { logEntry.ExtendedProperties.Add("ThrottledMessagesSkippedSinceLastLog", _lastTimeLogged[key].MessagesSkippedSinceLastLog.ToString()); _lastTimeLogged[key] = new RuleTracker(DateTime.Now, 0); } } } else if (_minEventThreshold == -1 || _minEventThreshold > 1) { _lastTimeLogged.Add(key, new RuleTracker(DateTime.Now, 1)); toReturn = false; } else { _lastTimeLogged.Add(key, new RuleTracker(DateTime.Now, 0)); } } return toReturn; }