'Use Serilog with Microsoft.Extensions.Logging.ILogger
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!
Solution 1:[1]
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.
Solution 2:[2]
For .NET 6 and later
using Serilog;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console()
.ReadFrom.Configuration(ctx.Configuration));
Reference: Here
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Thiago Silva |
Solution 2 | Shuvo Amin |