.NET 6 Web API 中的 AddSerilog 和 UseSerilog 有什么区别?

use*_*392 14 c# asp.net-web-api serilog .net-6.0

我正在尝试Serilog在 .NET 6 中配置 Web API 项目。

Log.Logger = new LoggerConfiguration()
        .ReadFrom.Configuration(builder.Configuration)
        .Enrich.FromLogContext()
        .WriteTo.Console()
        .CreateLogger();

builder.Logging.ClearProviders();

builder.Logging.AddSerilog(Log.Logger);
//builder.Host.UseSerilog(Log.Logger);
Run Code Online (Sandbox Code Playgroud)

将 Serilog 添加到日志记录管道和将 Serilog 设置为日志记录提供程序之间有什么行为差异?我应该调用这两种方法吗?

Der*_*eer 15

这是个很大的差异。

.AddSerilog()提供程序将 Serilog 提供程序添加为潜在的多个提供程序之一。通过以下配置,Microsoft 记录器将首先登录到 Console 提供程序,然后登录到 Serilog 提供程序:

.ConfigureLogging(logging => logging.AddConsole().AddSerilog())
Run Code Online (Sandbox Code Playgroud)

.UseSerilog()Serilog 配置为唯一的提供程序。无论您是否配置了日志记录管道,以下命令都会将所有日志发送到 Serilog :

.UseSerilog();
Run Code Online (Sandbox Code Playgroud)

区别实际上归结为使用 Micosoft 的可插拔模型或使用 Serilog 的可插拔模型。

通常您不会使用.AddSerilog()Serilog 库,因为 Serilog 库实际上旨在用作具有一个或多个“接收器”的唯一提供者,但在某些情况下,您可能需要登录到存在 Micosoft ILogger 的特定目标,并且ILoggerProvider,但不存在 Serilog 接收器(并且您不想自己编写它)。在这种情况下,您可以选择添加 Serilog 作为附加提供程序。