示例#1
0
 /// <summary>
 ///     Creates a filtered view onto this log file.
 /// </summary>
 /// <param name="logFile"></param>
 /// <param name="scheduler"></param>
 /// <param name="logLineFilter"></param>
 /// <param name="logEntryFilter"></param>
 /// <returns></returns>
 public static FilteredLogFile AsFiltered(this ILogFile logFile,
                                          ITaskScheduler scheduler,
                                          ILogLineFilter logLineFilter,
                                          ILogEntryFilter logEntryFilter)
 {
     return(AsFiltered(logFile, scheduler, logLineFilter, logEntryFilter, TimeSpan.FromMilliseconds(value: 10)));
 }
示例#2
0
        /// <summary>
        ///     Initializes this object.
        /// </summary>
        /// <param name="scheduler"></param>
        /// <param name="maximumWaitTime"></param>
        /// <param name="source"></param>
        /// <param name="logLineFilter"></param>
        /// <param name="logEntryFilter"></param>
        public FilteredLogFile(ITaskScheduler scheduler,
                               TimeSpan maximumWaitTime,
                               ILogFile source,
                               ILogLineFilter logLineFilter,
                               ILogEntryFilter logEntryFilter)
            : base(scheduler)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            _source               = source;
            _logLineFilter        = logLineFilter ?? new NoFilter();
            _logEntryFilter       = logEntryFilter ?? new NoFilter();
            _pendingModifications = new ConcurrentQueue <LogFileSection>();
            _indices              = new List <int>();
            _logEntryIndices      = new Dictionary <int, int>();
            _buffer               = new LogLine[BatchSize];
            _lastLogEntry         = new List <LogLine>();
            _maximumWaitTime      = maximumWaitTime;

            _source.AddListener(this, maximumWaitTime, BatchSize);
            StartTask();
        }
 /// <summary>
 /// Adds the filter to a global set.
 /// </summary>
 /// <param name="filter">The filter.</param>
 public void AddFilter(ILogLineFilter filter)
 {
     lock (_lockObject)
     {
         _globalFilters.Add(filter);
     }
 }
示例#4
0
        /// <summary>
        ///     Creates a filtered view onto this log file.
        /// </summary>
        /// <param name="logFile"></param>
        /// <param name="scheduler"></param>
        /// <param name="logLineFilter"></param>
        /// <param name="logEntryFilter"></param>
        /// <param name="maximumWaitTime"></param>
        /// <returns></returns>
        public static FilteredLogFile AsFiltered(this ILogFile logFile,
                                                 ITaskScheduler scheduler,
                                                 ILogLineFilter logLineFilter,
                                                 ILogEntryFilter logEntryFilter,
                                                 TimeSpan maximumWaitTime)
        {
            var file = new FilteredLogFile(scheduler, maximumWaitTime, logFile, logLineFilter, logEntryFilter);

            return(file);
        }
示例#5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="logEntryFilter"></param>
        /// <returns></returns>
        public static bool IsFilter(ILogLineFilter logEntryFilter)
        {
            if (logEntryFilter == null)
            {
                return(false);
            }

            if (logEntryFilter is NoFilter)
            {
                return(false);
            }

            return(true);
        }
        private void CreateFilteredLogFile()
        {
            _filteredLogFile?.Dispose();

            LevelFlags      levelFilter    = LevelFilter;
            ILogLineFilter  logLineFilter  = HideEmptyLines ? (ILogLineFilter) new EmptyLogLineFilter() : new NoFilter();
            ILogEntryFilter logEntryFilter = Filter.Create(levelFilter, _quickFilterChain);

            if (logEntryFilter != null)
            {
                _filteredLogFile      = UnfilteredLogFile.AsFiltered(_taskScheduler, logLineFilter, logEntryFilter, _maximumWaitTime);
                _logFile.InnerLogFile = _filteredLogFile;
            }
            else
            {
                _filteredLogFile      = null;
                _logFile.InnerLogFile = UnfilteredLogFile;
            }
        }
示例#7
0
        private void CreateFilteredLogFile()
        {
            _filteredLogFile?.Dispose();

            LevelFlags      levelFilter    = LevelFilter;
            ILogLineFilter  logLineFilter  = CreateLogLineFilter();
            ILogEntryFilter logEntryFilter = Filter.Create(levelFilter, _quickFilterChain);

            if (Filter.IsFilter(logEntryFilter) || Filter.IsFilter(logLineFilter))
            {
                _filteredLogFile      = UnfilteredLogFile.AsFiltered(_taskScheduler, logLineFilter, logEntryFilter, _maximumWaitTime);
                _logFile.InnerLogFile = _filteredLogFile;
            }
            else
            {
                _filteredLogFile      = null;
                _logFile.InnerLogFile = UnfilteredLogFile;
            }
        }
示例#8
0
        /// <summary>
        ///     Initializes this object.
        /// </summary>
        /// <param name="scheduler"></param>
        /// <param name="maximumWaitTime"></param>
        /// <param name="source"></param>
        /// <param name="logLineFilter"></param>
        /// <param name="logEntryFilter"></param>
        public FilteredLogSource(ITaskScheduler scheduler,
                                 TimeSpan maximumWaitTime,
                                 ILogSource source,
                                 ILogLineFilter logLineFilter,
                                 ILogEntryFilter logEntryFilter)
            : base(scheduler)
        {
            _source = source ?? throw new ArgumentNullException(nameof(source));

            _properties       = new ConcurrentPropertiesList(source.Properties);
            _propertiesBuffer = new PropertiesBufferList();             //< Will be used as temporary storage to hold the properties from the source

            _logLineFilter        = logLineFilter ?? new NoFilter();
            _logEntryFilter       = logEntryFilter ?? new NoFilter();
            _pendingModifications = new ConcurrentQueue <LogSourceModification>();
            _indices         = new List <int>();
            _logEntryIndices = new Dictionary <int, int>();
            _array           = new LogBufferArray(BatchSize, Core.Columns.Minimum);
            _lastLogBuffer   = new LogBufferList(Core.Columns.Minimum);
            _maximumWaitTime = maximumWaitTime;

            _source.AddListener(this, maximumWaitTime, BatchSize);
            StartTask();
        }
 /// <summary>
 /// Helper method. Applies a single filter to a collection of log lines.
 /// </summary>
 /// <param name="filter">The filter.</param>
 /// <param name="logLines">The log lines.</param>
 /// <param name="cts">The CTS.</param>
 public async Task Apply(ILogLineFilter filter, IEnumerable <LogLine> logLines, CancellationTokenSource cts)
 {
     var logLineList = logLines;
     var tasks       = logLineList.Select(filter.ApplyFilter);
     await Task.WhenAll(tasks);
 }