Serilog EventLog Sink 不记录日志

one*_*ill 5 event-log serilog

我已将Serilog.Sinks.EventLog接收器安装到一个小型后台工作服务项目中。但是,我尝试写入的日志均未显示在事件日志中。

这是我的 Main 方法的主体。指定RecurringTasks.Service为源的 已经创建(由我手动创建)。

Log.Logger = new LoggerConfiguration()
    .WriteTo.EventLog(source: "RecurringTasks.Service", logName: "Application")
    .CreateLogger();

Log.Logger.Information("Test message");

try
{
    var host = CreateHostBuilder(Log.Logger, args).Build();
    host.Run();
}
catch (Exception e)
{
    Log.Fatal(e, "Host terminated unexpectedly");
}
finally
{
    Log.CloseAndFlush();
}
Run Code Online (Sandbox Code Playgroud)

关于为什么“测试”消息没有写入事件日志的任何想法?干杯

Cai*_*ete 7

Serilog 故障排除的第一条规则是启用SelfLog并查看 Serilog 接收器抛出的错误消息。

机器上很可能不存在该源RecurringTasks.Service,需要先创建它,然后才能对其进行写入。

如果您的应用程序使用具有管理员权限的帐户运行(或者该帐户具有创建事件日志源的明确权限),您可以通过设置来告诉 Serilog 为您创建manageEventSourcetrue

Log.Logger = new LoggerConfiguration()
    .WriteTo.EventLog(source: "RecurringTasks.Service",
                      logName: "Application",
                      manageEventSource: true) // <<<<<<<
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

否则,您可以手动创建事件日志源(每台计算机一次性设置)。以管理员身份打开命令提示符并运行:

eventcreate.exe /ID 1 /L APPLICATION /T INFORMATION  /SO "RecurringTasks.Service" /D "RecurringTasks.Service"
Run Code Online (Sandbox Code Playgroud)

使用 PowerShell 或注册表的其他替代方案:问题:手动创建事件日志 #31

--

注意:您可以使用的一个简单方法是将日志写入名为的源,Application该源保证存在于计算机中,因为这是所有常见 Windows 日志所在的位置。这样您就不必创建新的源(并且不需要特殊的写入权限)。例如:

Log.Logger = new LoggerConfiguration()
    .WriteTo.EventLog(source: "Application")
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

有关的: