public FileLogger(string categoryName, IFileLoggerProcessor processor, IFileLoggerSettings settings, IExternalScopeProvider scopeProvider = null, Func <DateTimeOffset> timestampGetter = null) { if (categoryName == null) { throw new ArgumentNullException(nameof(categoryName)); } if (processor == null) { throw new ArgumentNullException(nameof(processor)); } if (settings == null) { throw new ArgumentNullException(nameof(settings)); } CategoryName = categoryName; _processor = processor; UpdatableState state = CreateState(null, settings); state.Settings = settings; state.FileGroups = GetFileGroups(settings); state.ScopeProvider = scopeProvider; _state = state; _timestampGetter = timestampGetter ?? (() => DateTimeOffset.UtcNow); }
public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { if (!IsEnabled(logLevel)) { return; } if (formatter == null) { throw new ArgumentNullException(nameof(formatter)); } UpdatableState currentState = _state; DateTimeOffset timestamp = _timestampGetter(); var message = FormatState(state, exception, formatter); StringBuilder sb = s_stringBuilder; s_stringBuilder = null; if (sb == null) { sb = new StringBuilder(); } foreach (KeyValuePair <(Type, bool), (ILogFileSettings, LogLevel, IFileLogEntryTextBuilder)[]> fileGroup in currentState.FileGroups)
public FileLogger(string categoryName, string fileName, IFileLoggerProcessor processor, Func <string, LogLevel, bool> filter = null, bool includeScopes = false, IFileLogEntryTextBuilder textBuilder = null, Func <DateTimeOffset> timestampGetter = null) { if (categoryName == null) { throw new ArgumentNullException(nameof(categoryName)); } if (fileName == null) { throw new ArgumentNullException(nameof(fileName)); } if (processor == null) { throw new ArgumentNullException(nameof(processor)); } CategoryName = categoryName; _processor = processor; _state = new UpdatableState { FileName = fileName, Filter = filter ?? ((c, l) => true), IncludeScopes = includeScopes, TextBuilder = textBuilder ?? FileLogEntryTextBuilder.Instance, }; _timestampGetter = timestampGetter ?? (() => DateTimeOffset.UtcNow); }
public void Update(IExternalScopeProvider scopeProvider) { UpdatableState currentState = _state; for (; ;) { UpdatableState newState = CreateState(currentState, null); newState.Settings = currentState.Settings; newState.FileGroups = currentState.FileGroups; newState.ScopeProvider = scopeProvider; UpdatableState originalState = Interlocked.CompareExchange(ref _state, newState, currentState); if (currentState == originalState) { return; } currentState = originalState; } }
public void Update(IFileLoggerSettings settings) { FileGroupsDictionary fileGroups = GetFileGroups(settings); UpdatableState currentState = _state; for (; ;) { UpdatableState newState = CreateState(currentState, settings); newState.Settings = settings; newState.FileGroups = fileGroups; newState.ScopeProvider = currentState.ScopeProvider; UpdatableState originalState = Interlocked.CompareExchange(ref _state, newState, currentState); if (currentState == originalState) { return; } currentState = originalState; } }
protected virtual UpdatableState CreateState(UpdatableState currentState, IFileLoggerSettings settings) { return(new UpdatableState()); }
protected virtual bool IsEnabled(UpdatableState state, LogLevel logLevel) { return(state.Filter(CategoryName, logLevel)); }
protected override bool IsEnabled(UpdatableState state, LogLevel logLevel) { return (logLevel <= LogLevel.Information && // don't allow messages more severe than information to pass through base.IsEnabled(state, logLevel)); }