.NET下如何将日志写入Windows事件查看器自定义应用通道?
解决方案:将Serilog日志写入Windows「应用程序和服务日志」自定义通道
问题说明
当前使用Serilog将日志写入Windows事件查看器时,日志默认被归类到「Windows日志/应用程序」中,需要将日志转移到「应用程序和服务日志」下的自定义日志通道(目标位置为该分类下的独立自定义日志节点)。未使用Azure服务,仅基于IIS部署应用。现有配置代码如下:
Log.Logger = new LoggerConfiguration().MinimumLevel.Debug() .WriteTo.EventLog("Laserfiche_Document_Finder", manageEventSource: true).CreateLogger(); builder.Host.UseSerilog();
appsettings.json配置片段:
"Serilog": { "using": [ "Serilog.Sinks.EventLog" ], "MinimumLevel": { "Default": "Information" }, "WriteTo": [ { "Name": "EventLog", "Args": { "source": "DLF", "manageEventSource": true } } ] }
实现步骤
1. 创建自定义事件日志通道(需管理员权限)
通过Windows命令提示符(管理员模式)执行以下命令,创建自定义日志及关联的事件源:
wevtutil sl "Laserfiche Document Finder" /c:Application /e:true wevtutil al "Laserfiche Document Finder" /s:"DLF"
- 第一条命令创建名为
Laserfiche Document Finder的自定义日志,类别设为应用程序类(对应「应用程序和服务日志」) - 第二条命令将事件源
DLF关联到该自定义日志
2. 修改Serilog配置,指定自定义日志名
Serilog的EventLog Sink默认使用Application日志,需显式指定logName参数指向刚创建的自定义日志:
代码配置修改:
Log.Logger = new LoggerConfiguration().MinimumLevel.Debug() .WriteTo.EventLog( source: "DLF", logName: "Laserfiche Document Finder", manageEventSource: false) // 已手动创建事件源,设为false避免冲突 .CreateLogger(); builder.Host.UseSerilog();
appsettings.json配置修改:
"Serilog": { "using": [ "Serilog.Sinks.EventLog" ], "MinimumLevel": { "Default": "Information" }, "WriteTo": [ { "Name": "EventLog", "Args": { "source": "DLF", "logName": "Laserfiche Document Finder", "manageEventSource": false } } ] }
3. 配置IIS应用池权限
确保IIS应用池的运行账户(默认是ApplicationPoolIdentity)拥有写入自定义事件日志的权限:
- 打开「事件查看器」,右键刚创建的自定义日志 → 「属性」→ 「安全」
- 添加应用池账户(格式为
IIS AppPool\<你的应用池名称>),授予「写入」权限
验证
重启IIS应用池后,触发日志写入操作,即可在「应用程序和服务日志」下找到自定义的Laserfiche Document Finder日志节点,日志将直接写入该通道。
内容的提问来源于stack exchange,提问作者It's Just a Printer Driver
相关产品推荐
相关产品推荐

