How to get a Serilog logger as Microsoft logger in a console application for DI?

72 Views Asked by At

I need to get Serilog as a logger in the console application in order to then pass it to the class. I know how to do this in ASP.NET Core, but I don't understand how to do it in a console application. var loggerService = host.Services.GetService<ILogger>() returns null.

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MyProgram.Services;
using Serilog;

var hostBuilder = Host.CreateApplicationBuilder(args);
hostBuilder.Configuration
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

var logger = new LoggerConfiguration()
    .ReadFrom.Configuration(hostBuilder.Configuration)
    .Enrich.FromLogContext()
    .CreateLogger();

hostBuilder.Logging.ClearProviders();
hostBuilder.Logging.AddSerilog(logger);
hostBuilder.Services.BuildServiceProvider();
var host = hostBuilder.Build();

var configService = host.Services.GetService<IConfiguration>();
var loggerService = host.Services.GetService<ILogger>(); // null

IMyService myService = new MyService(configService, loggerService);

The code of the class:

public class MyService : IMyService
{
    private readonly IConfiguration _config;
    private readonly ILogger _logger;

    public MyService(IConfiguration config, ILogger logger)
    {
        _config = config;
        _logger = logger;
    }

    private void DoSomething()
    {
        _logger.LogError("Exceprion.");
    }
}
0

There are 0 best solutions below