Пример #1
0
        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);
        }
Пример #2
0
        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)
Пример #3
0
        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);
        }
Пример #4
0
        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;
            }
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
 protected virtual UpdatableState CreateState(UpdatableState currentState, IFileLoggerSettings settings)
 {
     return(new UpdatableState());
 }
Пример #7
0
 protected virtual bool IsEnabled(UpdatableState state, LogLevel logLevel)
 {
     return(state.Filter(CategoryName, logLevel));
 }
Пример #8
0
 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));
 }