72 lines
2.9 KiB
C#
72 lines
2.9 KiB
C#
using SHH.ProcessLaunchers;
|
||
|
||
namespace SHH.ProcessLauncher
|
||
{
|
||
/// <summary>
|
||
/// 仪表盘日志适配器
|
||
/// <para>职责:实现 ILauncherLogger 接口,将启动器的底层日志转发给业务层的 LogHelper 和 UI 通知服务。</para>
|
||
/// </summary>
|
||
public class DashboardLogger : ILauncherLogger
|
||
{
|
||
#region --- 接口实现 ---
|
||
|
||
/// <summary>
|
||
/// 处理普通控制台日志 (StdOut/StdErr)
|
||
/// </summary>
|
||
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}");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 处理关键生命周期事件
|
||
/// </summary>
|
||
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
|
||
}
|
||
} |