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); }
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()); }
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)); }
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); }
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(); }
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()); } }