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

问题描述 投票:0回答:4

由于最近引入了 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();

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

c# serilog .net-6.0 sentry ilogger
4个回答
33
投票

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

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

那么你需要一个

using
:

using Serilog;

这应该允许您通过

.UseSerilog
访问
builder.Host
:

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

7
投票

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

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

builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);

链接


3
投票

在 Program.cs 类顶部粘贴以下内容:-

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("logs/rumble-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();

0
投票

//串行日志 Log.Logger = new LoggerConfiguration()

.WriteTo.File(new JsonFormatter(),@"logs\log-.txt", rollingInterval: RollingInterval.Hour)
.MinimumLevel.Error()
.WriteTo.Console(new JsonFormatter())
.CreateLogger();

builder.Host.UseSerilog(Log.Logger); var app = builder.Build();

© www.soinside.com 2019 - 2024. All rights reserved.