using System; namespace TeamAAS.Logging { /// 日志来源:公共日志(AppLogger)或任务插件日志(PluginLogger)。 public enum LogSource { /// 公共日志(AppLogger,恒显示)。 Common, /// 任务插件日志(PluginLogger,受各节点 LogLevel 阈值约束)。 Plugin } /// /// 内存日志条目(供实时日志控件 LogView 显示用)。 /// 与写入文件的日志行相互独立:这里保留结构化字段,控件自行决定呈现格式。 /// public class LogEntry { public LogEntry(DateTime time, LogSource source, LogLevel category, int level = 0, string flow = null, string task = null, string sourceTag = null, string message = null) { Time = time; Source = source; Category = category; Level = level; // 归一化详细度档位:插件 1/2 级 → 2,3/4 级 → 4;公共日志无等级 → 0 Tier = level > 0 ? (level <= 2 ? 2 : 4) : 0; Flow = flow ?? ""; Task = task ?? ""; SourceTag = sourceTag ?? ""; Message = message ?? ""; } /// 产生时间。 public DateTime Time { get; } /// 来源(公共/插件)。 public LogSource Source { get; } /// 日志类别(Debug/Info/Warning/Error/Critical),用于筛选与着色。 public LogLevel Category { get; } /// 插件条目详细度等级(1-4);公共日志为 0。 public int Level { get; } /// 归一化档位(2 或 4);公共日志为 0。仅用于打标签/分色,不参与显隐过滤。 public int Tier { get; } /// 所属流程名(插件)。 public string Flow { get; } /// 所属任务/节点名(插件)。 public string Task { get; } /// 公共日志来源标记(调用方传入的 source,如类名)。 public string SourceTag { get; } /// 日志正文。 public string Message { get; } public string TimeText => Time.ToString("HH:mm:ss.fff"); public string CategoryText => Category.ToString().ToUpperInvariant(); public bool IsPlugin => Source == LogSource.Plugin; /// 来源标签文本:插件显示 [流程][任务],公共显示 [source](无则空)。 public string OriginText => IsPlugin ? string.Concat("[", Flow, "][", Task, "]") : (string.IsNullOrWhiteSpace(SourceTag) ? "" : string.Concat("[", SourceTag, "]")); /// 插件档位标签文本(L2/L4);公共日志为空。 public string TierText => Tier == 0 ? "" : "L" + Tier; } }