LogEntry.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using System;
  2. namespace TeamAAS.Logging
  3. {
  4. /// <summary>日志来源:公共日志(AppLogger)或任务插件日志(PluginLogger)。</summary>
  5. public enum LogSource
  6. {
  7. /// <summary>公共日志(AppLogger,恒显示)。</summary>
  8. Common,
  9. /// <summary>任务插件日志(PluginLogger,受各节点 LogLevel 阈值约束)。</summary>
  10. Plugin
  11. }
  12. /// <summary>
  13. /// 内存日志条目(供实时日志控件 LogView 显示用)。
  14. /// 与写入文件的日志行相互独立:这里保留结构化字段,控件自行决定呈现格式。
  15. /// </summary>
  16. public class LogEntry
  17. {
  18. public LogEntry(DateTime time, LogSource source, LogLevel category,
  19. int level = 0, string flow = null, string task = null,
  20. string sourceTag = null, string message = null)
  21. {
  22. Time = time;
  23. Source = source;
  24. Category = category;
  25. Level = level;
  26. // 归一化详细度档位:插件 1/2 级 → 2,3/4 级 → 4;公共日志无等级 → 0
  27. Tier = level > 0 ? (level <= 2 ? 2 : 4) : 0;
  28. Flow = flow ?? "";
  29. Task = task ?? "";
  30. SourceTag = sourceTag ?? "";
  31. Message = message ?? "";
  32. }
  33. /// <summary>产生时间。</summary>
  34. public DateTime Time { get; }
  35. /// <summary>来源(公共/插件)。</summary>
  36. public LogSource Source { get; }
  37. /// <summary>日志类别(Debug/Info/Warning/Error/Critical),用于筛选与着色。</summary>
  38. public LogLevel Category { get; }
  39. /// <summary>插件条目详细度等级(1-4);公共日志为 0。</summary>
  40. public int Level { get; }
  41. /// <summary>归一化档位(2 或 4);公共日志为 0。仅用于打标签/分色,不参与显隐过滤。</summary>
  42. public int Tier { get; }
  43. /// <summary>所属流程名(插件)。</summary>
  44. public string Flow { get; }
  45. /// <summary>所属任务/节点名(插件)。</summary>
  46. public string Task { get; }
  47. /// <summary>公共日志来源标记(调用方传入的 source,如类名)。</summary>
  48. public string SourceTag { get; }
  49. /// <summary>日志正文。</summary>
  50. public string Message { get; }
  51. public string TimeText => Time.ToString("HH:mm:ss.fff");
  52. public string CategoryText => Category.ToString().ToUpperInvariant();
  53. public bool IsPlugin => Source == LogSource.Plugin;
  54. /// <summary>来源标签文本:插件显示 [流程][任务],公共显示 [source](无则空)。</summary>
  55. public string OriginText => IsPlugin
  56. ? string.Concat("[", Flow, "][", Task, "]")
  57. : (string.IsNullOrWhiteSpace(SourceTag) ? "" : string.Concat("[", SourceTag, "]"));
  58. /// <summary>插件档位标签文本(L2/L4);公共日志为空。</summary>
  59. public string TierText => Tier == 0 ? "" : "L" + Tier;
  60. }
  61. }