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