public void Add(LoggingEvent item, bool force)
        {
            var notifyRequired = false;

            if (!force &&
                _growLimiter != null &&
                _growLimiter.CheckLimitReached(_queue.Count))
            {
                return;
            }
            if (_queue.Count == 0)
            {
                // first event appears, so we need to notify that we have events
                notifyRequired = true;
            }
            _queue.Enqueue(item);
            if (notifyRequired)
            {
                OnBufferReady();
            }
        }
        public void Add(LoggingEvent item, bool force)
        {
            var notifyRequired = false;

            lock (_syncRoot)
            {
                if (!force &&
                    _growLimiter != null &&
                    _growLimiter.CheckLimitReached(_currentList.Count + _shadowList.Count))
                {
                    return;
                }
                if (_currentList.Count == 0)
                {
                    // first event appears, so we need to notify that we have events
                    notifyRequired = true;
                }
                _currentList.Add(item);
            }
            if (notifyRequired)
            {
                OnBufferReady();
            }
        }