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

How to configure and use Serilog in ASP.NET Core 6?

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

在官方提供的Serilog.AspNetCore example and in the Serilog.Sentry example中,他们在WebHostBuilder上使用了.UseSerilog()。我找不到这个方法。

这是我试过的:

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();

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

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

  • Serilog
  • Serilog.Extensions.Hosting(这提供了.UseSerilog扩展方法。如果你有Serilog.AspNetCore包,你不需要明确包含这个)

那么你需要 using:

using Serilog;

这应该允许您通过 builder.Host:

访问 .UseSerilog
using Serilog;

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

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

app.Run();

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

builder.Host.UseSerilog((hostContext, services, configuration) => {
    configuration.WriteTo.Console();
});