我正在C#中构建一个作为WorkerService运行的C#。在测试时,我能够很好地看到日志消息,因为有一个控制台窗口显示信息或错误消息。当我部署时,没有控制台窗口,因为这是一个没有GUI的服务。不过,我仍然希望记录信息性消息和错误。现在,我可以在事件查看器中看到显示服务启动、停止和显示任何错误的信息,但是我希望有一个日志文件,我可以向其中添加更详细的信息。以下是我的BackgroundWorker的样子。
public class WindowsBackgroundService : BackgroundService
{
private readonly ILogger<WindowsBackgroundService> logger;
public WindowsBackgroundService(ILogger<WindowsBackgroundService> logger)
{
this.logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
//Logic would go here.
logger.LogInformation($"New User {newCustomer.Firstname} {newCustomer.Lastname} Added");
}
await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
}这是我的Program.cs,以防有人好奇,或者它与它有任何关系。
var host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
options.ServiceName = "Customer Broker Service";
})
.ConfigureServices(services =>
{
services.AddHostedService<WindowsBackgroundService>();
})
.Build();
await host.RunAsync();当我尝试在部署机器上运行服务时使用记录器时,它会使服务崩溃,因为没有控制台窗口来显示日志。我在想我错过了一些很简单的东西。
发布于 2022-03-29 20:11:02
您可以尝试使用Serilog,只需将Serilog nuget包包含在您的项目和代码中:
var host = Host.CreateDefaultBuilder(args)
.UseSerilog()
.UseWindowsService(options =>
{
options.ServiceName = "Customer Broker Service";
})
.ConfigureServices((hostContext, services) =>
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile(@"C:\logs\log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
services.AddHostedService<WindowsBackgroundService>();
})
.Build();
await host.RunAsync();您需要确保路径“C:\log”存在,或者在上面的代码中相应地更改路径。您的工作代码不需要任何更改。
https://stackoverflow.com/questions/71666394
复制相似问题