private bool TryArchiveLogFile(FileLoggerOptions options, string logFilePath) { try { _FileSystem.MoveFile(logFilePath, Path.Combine(options.LogFileArchiveDirectory, Path.GetFileName(logFilePath))); return(true); } #pragma warning disable CA1031 // Do not catch general exception types catch #pragma warning restore CA1031 // Do not catch general exception types { return(false); } }
private void ApplyOptions(FileLoggerOptions options) { _ApplicationName = !string.IsNullOrWhiteSpace(options.ApplicationName) ? options.ApplicationName.Trim() : _HostEnvironment.ApplicationName; string LogFileDirectory = PrepareLogFileDirectory("Log file directory", options.LogFileDirectory, FileLoggerOptions.DefaultLogFileDirectory); string LogFileArchiveDirectory = PrepareLogFileDirectory("Log file archive directory", options.LogFileArchiveDirectory, FileLoggerOptions.DefaultLogFileArchiveDirectory); string LogFileNamePattern = !string.IsNullOrWhiteSpace(options.LogFileNamePattern) ? options.LogFileNamePattern.Trim() : !options.IncludeGroupNameInFileName ? FileLoggerOptions.DefaultLogFileNamePattern : FileLoggerOptions.DefaultGroupLogFileNamePattern; string TestFileName = FileNameGenerator.GenerateFileName( _ApplicationName, s_DefaultSystemTime, "__OptionsTest__", LogFileNamePattern); if (TestFileName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0) { throw new InvalidOperationException("Log file naming pattern cannot contain invalid characters."); } if (options.TestDiskOnStartup) { TestDiskPermissions(LogFileDirectory, LogFileArchiveDirectory, TestFileName + ".permtest"); } options.LogFileDirectory = LogFileDirectory; options.LogFileArchiveDirectory = LogFileArchiveDirectory; _LogFileNamePattern = LogFileNamePattern; _LogFileMaxSizeInKilobytes = options.LogFileMaxSizeInKilobytes > 0 ? options.LogFileMaxSizeInKilobytes : (int?)null; _State = new State(options.JsonOptions ?? FileLoggerOptions.DefaultJsonOptions); _LoggerGroupCache = new LoggerGroupCache(options.GroupOptions ?? FileLoggerOptions.DefaultGroupOptions); _LogFileManager.ClearCache(); }
public static LogFileManagementSchedule Build(ISystemTime systemTime, FileLoggerOptions options) { DateTime NowUtc = systemTime.UtcNow; DateTime NowLocal = systemTime.Now; (DateTime NextCutoverUtc, _) = CalculateSchedule( NowUtc, NowLocal, options.CutoverAndArchiveTimeZoneMode, options.LogFileCutoverTime, FileLoggerOptions.DefaultLogFileCutoverTime); (DateTime NextArchiveUtc, TimeSpan TimeUntilNextArchiveUtc) = CalculateSchedule( NowUtc, NowLocal, options.CutoverAndArchiveTimeZoneMode, options.LogFileArchiveTime, FileLoggerOptions.DefaultLogFileArchiveTime); return(new LogFileManagementSchedule(NextArchiveUtc, TimeUntilNextArchiveUtc, NextCutoverUtc)); }
private void LogMessageProcessingThreadBody(object?state) { WaitHandle[] Handles = new WaitHandle[] { _StopHandle, _ArchiveNowHandle, _MessageReadyHandle }; while (true) { int HandleIndex = WaitHandle.WaitAny(Handles); if (HandleIndex == 0) { break; } if (HandleIndex == 1) { _Timer?.Dispose(); FileLoggerOptions Options = _Options.CurrentValue; if (_Timer != null || Options.ArchiveLogFilesOnStartup) { _LogFileManager.ArchiveLogFiles(_ApplicationName !, Options, _LogFileNamePattern !); } _ManagementSchedule = LogFileManagementSchedule.Build(s_DefaultSystemTime, Options); _Timer = new Timer( (s) => _ArchiveNowHandle.Set(), state: null, _ManagementSchedule.TimeUntilNextArchiveUtc, TimeSpan.FromMilliseconds(-1)); _ArchiveNowHandle.Reset(); continue; } DrainMessages(archiveLogFiles: true); } // When exiting make sure anything remaining in the queue is pumped to files. DrainMessages(archiveLogFiles: false); }