Beispiel #1
0
        async Task CompleteCoreAsync(IFileLoggerSettingsBase newSettings)
        {
            Task[] completionTasks;
            lock (_logFiles)
            {
                if (_isDisposed)
                {
                    throw new ObjectDisposedException(nameof(FileLoggerProcessor));
                }

                completionTasks = _logFiles.Values.Select(lf =>
                {
                    lf.Queue.Complete();
                    return(lf.Queue.Completion);
                }).ToArray();

                _logFiles.Clear();

                if (newSettings != null)
                {
                    newSettings = newSettings.ToImmutable();

                    _settingsLock.EnterWriteLock();
                    try { Settings = newSettings; }
                    finally { _settingsLock.ExitWriteLock(); }
                }
            }

            try { await Task.WhenAll(completionTasks).ConfigureAwait(false); }
            catch (OperationCanceledException) { }
        }
Beispiel #2
0
        protected FileLoggerProvider(IFileLoggerContext context, IFileLoggerSettingsBase settings)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            Context  = context;
            Settings = settings.ToImmutable();

            Processor = CreateProcessor(Settings);

            _loggers = new Dictionary <string, FileLogger>();
        }
Beispiel #3
0
        bool HandleSettingsChangedCore(IFileLoggerSettingsBase settings)
        {
            lock (_loggers)
            {
                if (_isDisposed)
                {
                    return(false);
                }

                Settings = settings.ToImmutable();

                foreach (var logger in _loggers.Values)
                {
                    logger.Update(GetFallbackFileName(logger.CategoryName), Settings);
                }
            }

            ResetProcessor(Settings);

            return(true);
        }
Beispiel #4
0
        public FileLoggerProcessor(IFileLoggerContext context, IFileLoggerSettingsBase settings)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            Context  = context;
            Settings = settings.ToImmutable();

            _logFiles = new Dictionary <string, LogFileInfo>();

            _settingsLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);

            _disposeTokenSource        = new CancellationTokenSource();
            _completeTokenRegistration = context.CompleteToken.Register(Complete, useSynchronizationContext: false);
        }