我正在用 C# 構建一個作為 Windows 服務運行的 WorkerService。測驗時,我可以很好地看到日志訊息,因為有一個控制臺視窗顯示資訊或錯誤訊息。當我部署時,沒有控制臺視窗,因為這是一項沒有 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();
當我在部署機器上運行服務時嘗試使用記錄器時,它會使服務崩潰,因為沒有控制臺視窗來顯示日志。我想我在這里錯過了一些真正簡單的東西。
uj5u.com熱心網友回復:
您可以嘗試使用 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:\logs”存在,或者在上面的代碼中相應地更改路徑。您的作業人員代碼不需要任何更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452579.html
