示例#1
0
    public BufferedLogRoute(string kind, LogPriority minimalPriority, LogInfoOptions infoOptions, int bufferSize) : base(kind, minimalPriority)
    {
        this.LogInfoOptions = infoOptions;
        this.BufferSize     = Math.Max(bufferSize, 1);

        MasterBuffer = new FastStreamBuffer(false, this.BufferSize);
    }
示例#2
0
    public static string GetMultilineText(string src, LogInfoOptions opt, int paddingLenForNextLines = 1)
    {
        if ((opt.NewLineForString?.IndexOf("\n") ?? -1) == -1)
        {
            paddingLenForNextLines = 0;
        }

        string pad = Str.MakeCharArray(' ', paddingLenForNextLines);

        string[]      lines = src._GetLines();
        StringBuilder sb    = new StringBuilder();

        int num = 0;

        foreach (string line in lines)
        {
            if (line._IsFilled())
            {
                string line2 = line.TrimEnd();
                if (num >= 1)
                {
                    sb.Append(opt.NewLineForString);
                    sb.Append(pad);
                }
                sb.Append(line2);
                num++;
            }
        }

        return(sb.ToString());
    }
示例#3
0
    public static string GetTextFromData(object?data, LogInfoOptions opt)
    {
        if (data == null)
        {
            return("null");
        }
        if (data is string str)
        {
            return(str);
        }

        return(data._GetObjectDump("", opt.ObjectPrintSeparator, true));
    }
示例#4
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);
    }
示例#5
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();
    }
示例#6
0
    public void WriteRecordToBuffer(LogInfoOptions opt, MemoryBuffer <byte> b)
    {
        if (opt.WriteAsJsonFormat && Dbg.IsJsonSupported)
        {
            // JSON text
            LogJsonData jc = new LogJsonData();

            if (opt.WithTimeStamp)
            {
                jc.TimeStamp = this.TimeStamp;
            }

            if (opt.WithGuid)
            {
                jc.Guid = this.Guid;
            }

            if (opt.WithMachineName)
            {
                jc.MachineName = opt.MachineName;
            }

            if (opt.WithAppName)
            {
                jc.AppName = opt.AppName;
            }

            if (opt.WithKind)
            {
                jc.Kind = opt.Kind;
            }

            if (opt.WithPriority)
            {
                jc.Priority = this.Priority.ToString();
            }

            if (opt.WithTag)
            {
                jc.Tag = this.Tag._FilledOrDefault(LogTag.None);
            }

            if (opt.WithTypeName)
            {
                jc.TypeName = this.Data?.GetType().Name ?? "null";
            }

            jc.Data = this.Data;

            string jsonText = jc._GetObjectDump(jsonIfPossible: true);

            b.Write(jsonText._GetBytes_UTF8());
            b.Write(CrLfByte);
        }
        else
        {
            // Normal text
            StringBuilder sb = new StringBuilder();

            // Timestamp
            if (opt.WithTimeStamp)
            {
                sb.Append(this.TimeStamp._ToDtStr(true, DtStrOption.All, false));
                sb.Append(" ");
            }

            // Additional strings
            List <string?> additionalList = new List <string?>();

            if (opt.WithGuid)
            {
                additionalList.Add(this.Guid);
            }

            if (opt.WithMachineName)
            {
                additionalList.Add(opt.MachineName);
            }

            if (opt.WithAppName)
            {
                additionalList.Add(opt.AppName);
            }

            if (opt.WithKind)
            {
                additionalList.Add(opt.Kind);
            }

            if (opt.WithPriority)
            {
                additionalList.Add(this.Priority.ToString());
            }

            if (opt.WithTag)
            {
                additionalList.Add(this.Tag._FilledOrDefault(LogTag.None));
            }

            if (opt.WithTypeName)
            {
                additionalList.Add(this.Data?.GetType().Name ?? "null");
            }

            string additionalStr = Str.CombineStringArray(" ", additionalList.ToArray());
            if (additionalStr._IsFilled())
            {
                sb.Append("[");
                sb.Append(additionalStr);
                sb.Append("] ");
            }

            // Log text
            string logText = GetMultilineText(GetTextFromData(this.Data, opt), opt);
            sb.Append(logText);
            sb.Append("\r\n");

            b.Write(sb.ToString()._GetBytes_UTF8());
        }
    }