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