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) { } }
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>(); }
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); }
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); }