/// <summary> /// Constructor - <see cref="FileRotationLoggingConfig"/> parameter defines all initial values for the configuration and operation of this LMH. /// </summary> public TextFileDateTreeLogMessageHandler(Config configIn) : base(configIn.Name, configIn.LogGate) { config = new Config(configIn); // 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); string pruneMgrName = "{0}.PruneMgr".CheckedFormat(config.Name); Logging.ILogger pruneLogger = new QueuedLogger(pruneMgrName, LogGate); Dictionary <string, Logging.IMesgEmitter> pruneMgrEmitterDictionary = new Dictionary <string, IMesgEmitter>() { { "Issue", pruneLogger.Info }, { "Info", pruneLogger.Debug }, { "Debug", pruneLogger.Trace }, }; dirPruneMgr = new File.DirectoryTreePruningManager(pruneMgrName, config, pruneMgrEmitterDictionary); lineFmt = config.LineFormat; Setup(); }
/// <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>Copy constructor.</summary> /// <param name="rhs">Gives the Logger instance to make a copy from.</param> QueuedLogger(QueuedLogger rhs) : base(rhs) { dist4q = rhs.dist4q; }