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