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

Serilog.Sinks.EventLog写入日志未在系统事件日志中展示问题求助

常见原因及排查解决方法

  • 最低日志级别未显式配置
    Serilog默认最低日志级别虽然是Information,但如果项目其他位置有全局过滤规则,或者EventLog sink单独设置了更高的最低级别,会导致Information级别的测试日志被丢弃。建议在配置开头显式指定最低级别:
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .WriteTo.EventLog(source: "RecurringTasks.Service", logName: "Application")
    .CreateLogger();
  • 事件源与日志名绑定不匹配
    你手动创建的RecurringTasks.Service源可能并没有绑定到Application日志,导致日志实际写入了其他日志分支,在Application日志下看不到。可以用PowerShell命令验证源的归属:
Get-WinEvent -ListLog * | ForEach-Object { $_.LogName; $_.ProviderNames } | Select-String "RecurringTasks.Service"

如果输出的日志名不是Application,需要删除原有源重新绑定,或者调整Sink配置里的logName参数和实际绑定的日志名一致。

  • Host构建逻辑覆盖了Serilog配置
    你将预配置的Log.Logger传入了CreateHostBuilder,如果CreateHostBuilder内部调用了UseSerilog()、AddSerilog()这类扩展方法且没有设置保留原有配置的参数,会直接覆盖你之前写的EventLog Sink配置,导致日志没有走EventLog输出。修改Host配置时添加preserveStaticLogger:true参数即可:
Host.CreateDefaultBuilder(args)
    .UseSerilog(Log.Logger, preserveStaticLogger: true)
  • 运行身份权限不足
    就算事件源已经提前创建,如果你调试时用普通用户身份运行程序,或者部署的服务使用了权限受限的服务账号,可能会没有写入事件日志的权限。调试时右键Visual Studio选择「以管理员身份运行」测试,部署时先把服务运行身份切换为「本地系统账户」验证写入是否正常,再按需调整权限。

  • Serilog内部异常导致写入失败
    可以开启Serilog的自诊断日志查看Sink的错误信息,在创建Logger前添加以下代码:

// 输出到调试窗口,调试时可在VS输出面板查看
Serilog.Debugging.SelfLog.Enable(msg => System.Diagnostics.Debug.WriteLine(msg));
// 或者输出到本地文件方便排查
// Serilog.Debugging.SelfLog.Enable(msg => System.IO.File.AppendAllText(@"C:\serilog_err.log", msg + Environment.NewLine));

自诊断日志会明确返回比如源不存在、权限不足、参数错误等具体问题。

  • 事件查看器未刷新/日志配额满
    小概率场景:写入后手动刷新事件查看器的对应日志分支再查看;检查Application日志的配额设置,确认没有满日志导致新写入被丢弃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:02