I've created a .NET Core 3.1 project using a Host, the IoC container with IServiceCollection
and implemented logging allover the place using the ILogger<T>
interface from Microsoft.Extensions.Logging
. I now need to implement more advanced logging and decided to use Serilog.
I assumed that it would be a breeze to switch from .NET built-in loggers to Serilog. But to my surprise, Serilog is using it's own ILogger
interface - bummer! So now I needed to update ALL places to use Serilog ILogger
, or to implement Serilog with a .NET Core ILogger<T>
interface.
My question is - is it really not possible to use Serilog with the ILogger interface in Microsoft.Extensions.Logging
? Would be so much smarter!
Extensions. Logging provided by ASP.NET Core. This provides an ILogger interface that allows the provider of your choice to be used while minimizing the impact to existing code.
ILogger: is responsible to write a log message of a given Log Level. ILoggerFactory: you can register one or more ILoggerProvider s with the factory, which in turn uses all of them to create an instance of ILogger . ILoggerFactory holds a collection of ILoggerProviders .
Yes, ILogger s in Serilog are always safe to use concurrently from multiple threads.
In the Serilog.Extensions.Logging
assembly there is a extension method on IloggingBuilder
called AddSerilog
(it's in the Serilog namespace) that will allow you to use Serilog for logging. For example:
.NET Core 2.2 and earlier (using WebHost
):
WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddSerilog(); });
.NET Core 3.1 and later (using generic Host
for either web or console apps):
Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>()}) .UseSerilog();
Now the ILogger
and ILogger<>
implementation will call into Serilog.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With