完成进程启动器接口的设计

This commit is contained in:
2026-01-03 08:44:38 +08:00
parent dcf424a86e
commit 78061db9ef
11 changed files with 1369 additions and 2 deletions

View File

@@ -0,0 +1,72 @@
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
}
}