/// <summary> /// Constructor - <see cref="FileRotationLoggingConfig"/> parameter defines all initial values for the configuration and operation of this LMH. /// </summary> public TextFileRotationLogMessageHandler(FileRotationLoggingConfig frlConfig) : base(frlConfig.name, frlConfig.logGate, recordSourceStackFrame: frlConfig.includeFileAndLine) { // replace the default LogMessageHandlerLogger with a normal QueuedLogger. This is for use by all levels of this LMH type. // this allows generated messages to be inserted into and handled by the entire distribution system rather than just by this LMH instance. logger = new QueuedLogger(Name, LogGate); config = frlConfig; dirMgr = new File.DirectoryFileRotationManager(config.name); lineFmt = new LineFormat(true, config.includeQpcTime, true, true, true, config.includeFileAndLine, "\r\n", "\t") { IncludeThreadInfo = config.includeThreadInfo, IncludeNamedValueSet = config.includeNamedValueSet }; dirMgrConfig = new MosaicLib.File.DirectoryFileRotationManager.Config(); dirMgrConfig.dirPath = config.dirPath; dirMgrConfig.fileNamePrefix = config.fileNamePrefix; dirMgrConfig.fileNameSuffix = config.fileNameSuffix; if (config.nameUsesDateAndTime) { dirMgrConfig.fileNamePattern = File.DirectoryFileRotationManager.FileNamePattern.ByDate; } else { dirMgrConfig.fileNamePattern = File.DirectoryFileRotationManager.FileNamePattern.Numeric4DecimalDigits; } dirMgrConfig.excludeFileNamesSet = config.excludeFileNamesSet; dirMgrConfig.advanceRules = config.advanceRules; double testPeriodInSec = config.advanceRules.testPeriodInSec; if (testPeriodInSec == 0.0) { testPeriodInSec = Math.Min(10.0, config.advanceRules.fileAgeLimitInSec / 3.0); } dirMgrConfig.advanceRules.testPeriodInSec = testPeriodInSec; dirMgrConfig.purgeRules = config.purgeRules; dirMgrConfig.enableAutomaticCleanup = true; dirMgrConfig.maxAutoCleanupDeletes = 200; dirMgrConfig.createDirectoryIfNeeded = config.createDirectoryIfNeeded; SetupDirMgr(); }
/// <summary> /// Constructor - <see cref="FileRotationLoggingConfig"/> parameter defines all initial values for the configuration and operation of this LMH. /// </summary> public TextFileRotationLogMessageHandler(FileRotationLoggingConfig frlConfig) : base(frlConfig.name, frlConfig.logGate, frlConfig.includeFileAndLine, true) { // replace the default LogMessageHandlerLogger with a normal QueuedLogger. This is for use by all levels of this LMH type. // this allows generated messages to be inserted into and handled by the entire distribution system rather than just by this LMH instance. logger = new QueuedLogger(Name, LogGate, frlConfig.includeFileAndLine); config = frlConfig; dirMgr = new File.DirectoryFileRotationManager(config.name); lineFmt = new LineFormat(true, config.includeQpcTime, true, true, true, config.includeFileAndLine, "\r\n", "\t") { IncludeThreadInfo = config.includeThreadInfo }; dirMgrConfig = new MosaicLib.File.DirectoryFileRotationManager.Config(); dirMgrConfig.dirPath = config.dirPath; dirMgrConfig.fileNamePrefix = config.name; dirMgrConfig.fileNameSuffix = ".log"; if (config.nameUsesDateAndTime) dirMgrConfig.fileNamePattern = File.DirectoryFileRotationManager.FileNamePattern.ByDate; else dirMgrConfig.fileNamePattern = File.DirectoryFileRotationManager.FileNamePattern.Numeric4DecimalDigits; dirMgrConfig.excludeFileNamesSet = config.excludeFileNamesSet; dirMgrConfig.advanceRules.fileSizeLimit = config.advanceRules.fileSizeLimit; dirMgrConfig.advanceRules.fileAgeLimitInSec = config.advanceRules.fileAgeLimitInSec; double testPeriodInSec = config.advanceRules.testPeriodInSec; if (testPeriodInSec == 0.0) testPeriodInSec = Math.Min(10.0, config.advanceRules.fileAgeLimitInSec / 3.0); dirMgrConfig.advanceRules.testPeriodInSec = testPeriodInSec; dirMgrConfig.purgeRules.dirNumFilesLimit = config.purgeRules.dirNumFilesLimit; dirMgrConfig.purgeRules.dirTotalSizeLimit = config.purgeRules.dirTotalSizeLimit; dirMgrConfig.purgeRules.fileAgeLimitInSec = config.purgeRules.fileAgeLimitInSec; dirMgrConfig.enableAutomaticCleanup = true; dirMgrConfig.maxAutoCleanupDeletes = 200; dirMgrConfig.createDirectoryIfNeeded = config.createDirectoryIfNeeded; SetupDirMgr(); }
/// <summary> /// Modular.Config helper setup method. Constructs a FileRotationLoggingConfig from the matching contents in this object and then /// calls its UpdateFromModularConfig method to fill in its values from modular config. Finally this method updates the localy stored /// values from the updated FileRotationLoggingConfig contents and reconstructs the LineFormat /// </summary> public Config UpdateFromModularConfig(string configKeyPrefixStr, Logging.IMesgEmitter issueEmitter = null, Logging.IMesgEmitter valueEmitter = null, IConfig configInstance = null) { FileRotationLoggingConfig frlConfig = new FileRotationLoggingConfig(Name, DirPath) { dirPath = DirPath, fileNamePrefix = FileNamePrefix, fileNameSuffix = FileNameExtension, logGate = LogGate, includeQpcTime = IncludeQpc, includeNamedValueSet = IncludeNamedValueSet, includeThreadInfo = IncludeThreadInfo, advanceRules = AdvanceRules, purgeRules = new FileRotationLoggingConfig.PurgeRules(PruneRules), mesgQueueSize = MesgQueueSize, }; frlConfig.UpdateFromModularConfig(configKeyPrefixStr, issueEmitter: issueEmitter, valueEmitter: valueEmitter, configInstance: configInstance); DirPath = frlConfig.dirPath; FileNamePrefix = frlConfig.fileNamePrefix; FileNameExtension = frlConfig.fileNameSuffix; LogGate = frlConfig.logGate; IncludeQpc = frlConfig.includeQpcTime; IncludeNamedValueSet = frlConfig.includeNamedValueSet; IncludeThreadInfo = frlConfig.includeThreadInfo; AdvanceRules = frlConfig.advanceRules; PruneMode = File.DirectoryTreePruningManager.PruneMode.PruneDirectories; PruneRules = new File.DirectoryTreePruningManager.PruneRules(frlConfig.purgeRules); MesgQueueSize = frlConfig.mesgQueueSize; return(this); }
/// <summary>Creates a QueueLogMessageHandler wrapped around a TextFileRotationLogMessageHandler configured using the given config value.</summary> public static ILogMessageHandler CreateQueuedTextFileRotationDirectoryLogMessageHandler(FileRotationLoggingConfig config) { return new Handlers.QueueLogMessageHandler(new Handlers.TextFileRotationLogMessageHandler(config), config.mesgQueueSize); }