0
votes

I am building a WorkerService in C# that runs as a Windows Service. When testing I am able to see log messages fine as there is a console window displaying the information or error messages. When I deploy there is no console window as this is a service with no GUI to speak of. I would still like to log informational messages and errors though. Right now I can see information in the Event Viewer showing the service starting and stopping and displaying any errors but I would like to potentially have a log file I can add more detailed information to. Here is what my BackgroundWorker looks like.

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);
}

Here is my Program.cs in case anyone is curious or it has anything to do with it.

var host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
    options.ServiceName = "Customer Broker Service";
})
.ConfigureServices(services =>
{
    services.AddHostedService<WindowsBackgroundService>();
})
.Build();

await host.RunAsync();

When I try and use the logger while the service is running on the deployment machine it crashes the service because there is no console window to display the log. I am thinking I am missing something real simple here.