Example #1
0
                /// <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();
                }
Example #4
0
 /// <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;
 }