我正在使用.NET Core 3.0预览版的新工作器服务应用程序模板,并尝试使用AddEventLog
方法添加事件日志记录。但是,我无法通过Windows事件查看器看到我的任何日志。
我有一个非常简单的工作器应用程序设置,并在Program.cs
文件中进行了以下日志配置:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureLogging((context, logging) =>
{
logging.AddEventLog(new EventLogSettings()
{
SourceName = "MyTestSource",
LogName = "MyTestLog"
});
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
接下来,我在Worker.cs
文件中编写了一些日志记录语句,如下所示:
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
public override async Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation($"Worker started at: {DateTime.Now}");
await base.StartAsync(cancellationToken);
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation($"Worker stopped at: {DateTime.Now}");
await base.StopAsync(cancellationToken);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation( $"Worker running at: {DateTime.Now}");
await Task.Delay(1000, stoppingToken);
}
}
为设置事件日志,我在提升的 Powershell 提示符下运行了以下命令:
New-EventLog -LogName MyTestLog -Source MyTestSource
如果我打开事件查看器,可以看到"MyTestLog" 在 "应用程序和服务日志" 下方列出。
然后,为将我的 Worker 设置为 Windows 服务,我从提升的命令提示符下运行了以下命令:
dotnet publish -o publish
(发布项目并输出到发布目录)
sc create MyTestService binPath=<path to exe in publish directory>
服务已经成功创建,并且我可以在服务管理器应用程序中看到它。从那里,我手动启动服务,然后返回事件查看器,但没有显示任何日志。
我原本期望会有一些日志。然而,在事件查看器中,“MyTestLog” 部分仍然是空的。