Пример #1
0
    public Logger(string dir, string kind, string prefix, int uniqueProcessId, LogSwitchType switchType, LogInfoOptions infoOptions,
                  long maxLogSize             = 0, string extension = DefaultExtension,
                  long?autoDeleteTotalMinSize = null,
                  bool keepFileHandleWhenIdle = true)
        : base()
    {
        this.UniqueProcessId        = uniqueProcessId;
        this.DirName                = dir._NonNullTrim();
        this.Kind                   = kind._NonNullTrim()._FilledOrDefault(LogKind.Default);
        this.Prefix                 = prefix._NonNullTrim()._FilledOrDefault("log")._ReplaceStr("\\", "_").Replace("/", "_");
        this.SwitchType             = switchType;
        this.Extension              = extension._FilledOrDefault(DefaultExtension);
        this.KeepFileHandleWhenIdle = keepFileHandleWhenIdle;
        if (this.MaxLogSize <= 0)
        {
            this.MaxLogSize = CoresConfig.Logger.DefaultMaxLogSize;
        }
        this.MaxLogSize = Math.Max(maxLogSize, BufferCacheMaxSize * 10L);
        if (this.Extension.StartsWith(".") == false)
        {
            this.Extension = "." + this.Extension;
        }

        this.InfoOptions = infoOptions._CloneDeep();
        this.InfoOptions.Normalize(this.Kind);


        if (autoDeleteTotalMinSize != null && autoDeleteTotalMinSize.Value != long.MaxValue)
        {
            autoDeleteTotalMinSize = autoDeleteTotalMinSize._FilledOrDefault(CoresConfig.Logger.DefaultAutoDeleteTotalMinSize.Value);
            this.Eraser            = new OldFileEraser(autoDeleteTotalMinSize ?? 0, dir._SingleArray(), extension, CoresConfig.Logger.EraserIntervalMsecs);
        }

        LogTask = LogThreadAsync()._LeakCheck();
    }
Пример #2
0
    string MakeLogFileNameStringFromTick(DateTimeOffset dateTime, LogSwitchType switchType)
    {
        if (this.LastCachedStr != null)
        {
            if (this.LastTick == dateTime.Ticks && this.LastSwitchType == switchType)
            {
                return(this.LastCachedStr);
            }
        }

        string str = "";

        switch (switchType)
        {
        case LogSwitchType.Second:
            str = dateTime.ToString("_yyyyMMdd_HHmmss");
            break;

        case LogSwitchType.Minute:
            str = dateTime.ToString("_yyyyMMdd_HHmm");
            break;

        case LogSwitchType.Hour:
            str = dateTime.ToString("_yyyyMMdd_HH");
            break;

        case LogSwitchType.Day:
            str = dateTime.ToString("_yyyyMMdd");
            break;

        case LogSwitchType.Month:
            str = dateTime.ToString("_yyyyMM");
            break;
        }

        this.LastCachedStr  = str;
        this.LastTick       = dateTime.Ticks;
        this.LastSwitchType = SwitchType;

        return(str);
    }
Пример #3
0
        public LoggerLogRoute(string kind, LogPriority minimalPriority, string prefix, string dir, LogSwitchType switchType, LogInfoOptions infoOptions,
                              long?autoDeleteTotalMaxSize = null) : base(kind, minimalPriority)
        {
            if (minimalPriority == LogPriority.None)
            {
                return;
            }

            Log = new Logger(dir, kind, prefix, LocalLogRouter.UniqueLogProcessId,
                             switchType: switchType,
                             infoOptions: infoOptions,
                             maxLogSize: CoresConfig.Logger.DefaultMaxLogSize,
                             autoDeleteTotalMinSize: autoDeleteTotalMaxSize ?? CoresConfig.Logger.DefaultAutoDeleteTotalMinSize);

            AddDirectDisposeLink(Log);
        }
Пример #4
0
    bool MakeLogFileName(out string name, string dir, string prefix, int uniqueProcessId, DateTimeOffset dateTime, LogSwitchType switchType, int num, ref string oldDateStr)
    {
        prefix = prefix._TrimNonNull();
        string dateTimePart       = MakeLogFileNameStringFromTick(dateTime, switchType);
        string numberStr          = "";
        string logSuffixStr       = "";
        string uniqueProcessIdStr = ("@" + uniqueProcessId.ToString("D3"));
        bool   ret = false;

        if (CoresLib.LogFileSuffix._IsFilled())
        {
            logSuffixStr = "@" + CoresLib.LogFileSuffix;
        }

        if (num != 0)
        {
            long maxLogSize = this.MaxLogSize;
            int  digits     = 9;
            if (maxLogSize >= 1000000000L)
            {
                digits = 3;
            }
            else if (maxLogSize >= 100000000L)
            {
                digits = 4;
            }
            else if (maxLogSize >= 10000000L)
            {
                digits = 5;
            }
            else if (maxLogSize >= 1000000L)
            {
                digits = 6;
            }
            else if (maxLogSize >= 100000L)
            {
                digits = 7;
            }
            else if (maxLogSize >= 10000L)
            {
                digits = 8;
            }
            numberStr = "~" + num.ToString($"D" + digits);
        }

        if (oldDateStr != dateTimePart)
        {
            ret        = true;
            oldDateStr = dateTimePart;
        }

        name = Path.Combine(dir, prefix + dateTimePart + logSuffixStr + uniqueProcessIdStr + numberStr + this.Extension);

        return(ret);
    }