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