如何在ASP.NET Core 6中配置和使用Serilog?

WoI*_*IIe 33 c# sentry serilog ilogger .net-6.0

由于最近引入了 Program.cs 启动代码的新结构,该文档让我有点困惑。

在官方提供的Serilog.AspNetCore示例和示例Serilog.Sentry,他们使用.UseSerilog()WebHostBuilder. 我找不到这个方法。

这是我尝试过的:

using Serilog;

var builder = WebApplication.CreateBuilder(args);
// adding services...

builder.Logging.AddSerilog(); // <- is this even necessary?

var app = builder.Build();
app.UseSerilogRequestLogging();

// configure request pipeline
app.Run();
Run Code Online (Sandbox Code Playgroud)

但是如何/在哪里配置接收器,例如调试、控制台、哨兵……?我觉得文档有点过时,或者我只是有点盲目。

Joh*_*ica 43

您需要确保安装了以下软件包:

  • 串行日志
  • Serilog.Extensions.Hosting(这提供了.UseSerilog扩展方法。如果你有 Serilog.AspNetCore 包,则不需要显式包含它)

然后你需要一个using

using Serilog;
Run Code Online (Sandbox Code Playgroud)

.UseSerilog这应该允许您通过以下方式访问builder.Host

using Serilog;

var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog();
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

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

您可以使用不同的重载来获取托管上下文、服务和配置。从那里您可以配置接收器等:

builder.Host.UseSerilog((hostContext, services, configuration) => {
    configuration.WriteTo.Console();
});
Run Code Online (Sandbox Code Playgroud)

  • 作为旁注,来自“Serilog.Extensions.Hosting”的官方 GitHub Readme:_ASP.NET Core 应用程序应考虑使用“Serilog.AspNetCore”,它捆绑了此包并包含其他 ASP.NET Core 特定功能。_ 。 (15认同)

小智 10

我使用以下代码片段来解决该问题。我将其添加到 Program.cs

var logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
.Enrich.FromLogContext()
.CreateLogger();

builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);
Run Code Online (Sandbox Code Playgroud)

关联