将 Serilog 与 Microsoft.Extensions.Logging.ILogger 一起使用
Use Serilog with Microsoft.Extensions.Logging.ILogger
我使用主机创建了一个 .NET Core 3.1 项目,使用 IServiceCollection
的 IoC 容器并使用来自 Microsoft.Extensions.Logging
的 ILogger<T>
接口实现了整个地方的日志记录。我现在需要实现更高级的日志记录并决定使用 Serilog。
我认为从 .NET 内置记录器切换到 Serilog 会轻而易举。但令我惊讶的是,Serilog 正在使用它自己的 ILogger
接口——真可惜!所以现在我需要更新所有地方以使用 Serilog ILogger
,或使用 .NET Core ILogger<T>
接口实现 Serilog。
我的问题是 - 在 Microsoft.Extensions.Logging
中真的不能将 Serilog 与 ILogger 接口一起使用吗?会更聪明!
在 Serilog.Extensions.Logging
程序集中,IloggingBuilder
上有一个名为 AddSerilog
的扩展方法(它位于 Serilog 命名空间中),它允许您使用 Serilog 进行日志记录。例如:
.NET Core 2.2 及更早版本(使用 WebHost
):
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddSerilog();
});
.NET Core 3.1 及更高版本(对 Web 或控制台应用程序使用通用 Host
):
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>()})
.UseSerilog();
现在 ILogger
和 ILogger<>
实现将调用 Serilog。
对于 .NET 6 及更高版本
using Serilog;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console()
.ReadFrom.Configuration(ctx.Configuration));
参考:Here
我使用主机创建了一个 .NET Core 3.1 项目,使用 IServiceCollection
的 IoC 容器并使用来自 Microsoft.Extensions.Logging
的 ILogger<T>
接口实现了整个地方的日志记录。我现在需要实现更高级的日志记录并决定使用 Serilog。
我认为从 .NET 内置记录器切换到 Serilog 会轻而易举。但令我惊讶的是,Serilog 正在使用它自己的 ILogger
接口——真可惜!所以现在我需要更新所有地方以使用 Serilog ILogger
,或使用 .NET Core ILogger<T>
接口实现 Serilog。
我的问题是 - 在 Microsoft.Extensions.Logging
中真的不能将 Serilog 与 ILogger 接口一起使用吗?会更聪明!
在 Serilog.Extensions.Logging
程序集中,IloggingBuilder
上有一个名为 AddSerilog
的扩展方法(它位于 Serilog 命名空间中),它允许您使用 Serilog 进行日志记录。例如:
.NET Core 2.2 及更早版本(使用 WebHost
):
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddSerilog();
});
.NET Core 3.1 及更高版本(对 Web 或控制台应用程序使用通用 Host
):
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>()})
.UseSerilog();
现在 ILogger
和 ILogger<>
实现将调用 Serilog。
对于 .NET 6 及更高版本
using Serilog;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console()
.ReadFrom.Configuration(ctx.Configuration));
参考:Here