Serilog EventLog 接收器未记录
Serilog EventLog Sink is not Logging
我已经将 Serilog.Sinks.EventLog
接收器安装到一个小的后台工作者服务项目中。但是,我尝试写入的日志中有 none 显示在事件日志中。
这是我的 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
在计算机上不存在,需要先创建才能写入。
如果您的应用程序 运行正在使用具有管理员权限的帐户(或者该帐户具有创建事件日志源的明确权限),您可以通过设置 [=15= 告诉 Serilog 为您创建源] 到 true
:
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();
相关:
- Unable to determine permissions for Windows Container registry edit access
- How to write custom event ID to the Event Log using Serilog?
我已经将 Serilog.Sinks.EventLog
接收器安装到一个小的后台工作者服务项目中。但是,我尝试写入的日志中有 none 显示在事件日志中。
这是我的 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
在计算机上不存在,需要先创建才能写入。
如果您的应用程序 运行正在使用具有管理员权限的帐户(或者该帐户具有创建事件日志源的明确权限),您可以通过设置 [=15= 告诉 Serilog 为您创建源] 到 true
:
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();
相关:
- Unable to determine permissions for Windows Container registry edit access
- How to write custom event ID to the Event Log using Serilog?