using SHH.ProcessLaunchers; namespace SHH.ProcessLauncher { /// /// 仪表盘日志适配器 /// 职责:实现 ILauncherLogger 接口,将启动器的底层日志转发给业务层的 LogHelper 和 UI 通知服务。 /// public class DashboardLogger : ILauncherLogger { #region --- 接口实现 --- /// /// 处理普通控制台日志 (StdOut/StdErr) /// public void LogConsole(string processId, string message, bool isError) { // 1. 在控制台/调试窗口刷屏显示 string prefix = isError ? "[ERR]" : "[INF]"; //// 这里可以直接输出,或者通过事件抛给 UI 层去绑定 TextBox //// 为了演示,我们使用 LogHelper 的 Debug 方法 //LogHelper.Debug($"[Console] {prefix} <{processId}>: {message}"); } /// /// 处理关键生命周期事件 /// public void LogLifecycle(string processId, LogAction action, LogTrigger trigger, string reason, object payload = null) { // 1. 生成高可读的结构化日志文本 string logText = $"[{action.ToString().ToUpper()}] 触发源:{trigger} | 原因:{reason}"; if (payload != null) logText += $" | 数据:{payload}"; // 2. 根据触发源 (LogTrigger) 决定业务系统的响应策略 switch (trigger) { //case LogTrigger.User: // // 场景:用户点击了按钮 // // 策略:这是预期内操作,仅记录 Info 日志,不弹窗打扰用户 // LogHelper.Info(processId, logText); // break; //case LogTrigger.System: // // 场景:崩溃自动重启、熔断恢复等 // // 策略:记录 Warn 日志,运维人员需要知道系统发生了自愈行为 // LogHelper.Warn(processId, logText); // break; //case LogTrigger.ResourceGuard: // // 场景:内存超限被杀、CPU 报警 // // 策略:这是严重问题,必须记录 Error 日志,并发送 UI 强提醒 (Toast/弹窗) // LogHelper.Error(processId, logText); // // 调用通知服务 (模拟) // NotificationService.ShowWarning($"进程异常: {processId}", $"触发资源管控: {reason}"); // break; //case LogTrigger.Scheduler: // // 场景:定时重启 // LogHelper.Info(processId, $"[计划任务] {logText}"); // break; //default: // LogHelper.Info(processId, logText); // break; } } #endregion } }