So I have a .Net Core Console application and a bunch of .Net core Libraries.
Most of the classes in the libraries have constructors like this.
public class ReportingManager
{
private ILogger _logger;
Public ReportingManager(ILogger logger)
{
_logger = logger;
}
}
with ILogger
being of type Microsoft.Extentions.Logging.ILogger
In my Console app I have this.
class Program
{
static void Main(string[] args)
{
var serilog = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Warning)
.Enrich.FromLogContext()
.WriteTo.Console(theme: AnsiConsoleTheme.Code)
.CreateLogger();
ReportingManager manager = new ReportingManager(serilog);
}
}
I have an intellisense error at 'ReportingManager manager = new ReportingManager(serilog);'
cannot convert from 'Serilog.Core.Logger' to 'Microsoft.Extensions.Logging.ILogger'
So my question is, how do I pass in Serilog correctly?
Had a look online and here but most talk about ASP.Net Core.
You need to wrap the Serilog logger into Microsoft.Extensions.Logging.LoggerFactory
. This is exactly what happens when same is used in DI in ASP.NET.
Like this :
Serilog.Core.Logger serilog = ...;
var loggerFactory = new LoggerFactory()
.AddSerilog(serilog);
Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger("Logger");
This needs Serilog.Extensions.Logging
NuGet package.