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;
        }