You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 9 Windows服务LoggerMessage事件日志ID异常问题咨询

.NET 9 Windows服务中LoggerMessage事件ID问题解析与解决

事件ID来源

LoggerMessage框架默认会对日志消息模板进行哈希计算,生成一个整数作为事件ID,这就是你看到的"随机5位数字"。而直接调用_logger.LogWarning时,若未显式指定事件ID,系统默认使用0,这是基础日志方法的固定默认值。

解决方法

1. 手动指定固定事件ID(包括统一用0)

在定义LoggerMessage时,显式传入EventId参数即可固定ID,示例代码:

// 定义时指定EventId为0
private static readonly Action<ILogger, string, Exception> _sampleWarning =
    LoggerMessage.Define<string>(
        LogLevel.Warning,
        new EventId(0), // 固定事件ID为0
        "警告:{Operation} 执行异常"
    );

// 使用时直接调用
_sampleWarning(_logger, "数据同步", null);

这样日志输出的事件ID会统一为0,和直接用LogWarning的效果一致,同时不会触发"找不到描述"的提示。

2. 注册事件ID与描述消除提示

如果需要保留LoggerMessage生成的ID或自定义其他ID,可通过注册事件日志资源文件解决描述缺失问题:

  • 创建.resx资源文件,添加对应事件ID的描述(比如ID12345对应"自定义警告:{Param} 无效")
  • 使用resgen.exe将.resx编译为.resources文件,再用al.exe生成资源.dll
  • 用注册表命令将资源.dll关联到你的事件源:
    reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\My Service Name" /v EventMessageFile /t REG_EXPAND_SZ /d "C:\你的资源文件路径\Resource.dll;%SystemRoot%\System32\EventLog.dll" /f
    
    完成后事件查看器就能找到对应ID的描述,不再显示提示。

内容的提问来源于stack exchange,提问作者M.M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:18:19