/// <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();
                }
Exemplo n.º 3
0
                    /// <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);
                    }
Exemplo n.º 4
0
 /// <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);
 }