Serilog EventLog 接收器未记录

标签 serilog event-log

我已经将 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();
}

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

最佳答案

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

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

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

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

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

eventcreate.exe /ID 1 /L APPLICATION /T INFORMATION  /SO "RecurringTasks.Service" /D "RecurringTasks.Service"

使用 PowerShell 或注册表的其他替代方案:Question: Create Event Log manually #31

--

N.B.:您可以使用的一个简单的hack 是将您的日志写入一个名为Application 的源,它保证存在于机器中,因为它是所有常见的地方Windows 日志去。这样您就不必创建新的源(也不需要特殊的写入权限)。例如:

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

相关:

关于Serilog EventLog 接收器未记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68947547/

相关文章:

.net - 如何在运行时激活日志记录而不重新启动应用程序?

c# - 如果我从 Startup.cs 而不是从 Program.cs 注入(inject) Serilog,这是一种不好的做法吗?

c++ - EvtArchiveExportedLog 失败并显示 ERROR_DIRECTORY

asp.net-core-1.0 - Serilog : How to use logging in 'Class Library' of asp. 网络核心

serilog - 如何为 .NET Core 3.0 Worker 服务设置 serilog SEQ

c# - 如何在 Serilog 输出模板中创建可选属性?

sql - (Windows) 异常处理 : to Event Log or to Database?

windows - 远程查询Windows事件日志(Linux)

c# - 访问/写入 EventLog 时出现问题

r - 错误在R中找不到函数 “pull”