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

32

自从新的Program.cs启动代码结构被引入后,文档让我感到有些困惑。

在官方提供的Serilog.AspNetCore示例Serilog.Sentry示例中,他们在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();

但是我应该在哪里 / 如何配置 sink,例如调试、控制台、Sentry等? 我感觉文档有点过时或者我只是有点糊涂了。


请参阅 https://blog.datalust.co/using-serilog-in-net-6/,了解在 .NET 6 中使用 Serilog 的方法。 - Ruben Bartelink
请查看此链接:https://stackoverflow.com/questions/76641381/how-to-add-serilog-in-program-cs-in-net6/76668977#76668977 - Upender Reddy
5个回答

43

您需要确保已安装以下程序包:

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

13
顺带一提,从Serilog.Extensions.Hosting的官方GitHub自述文件中可以看出:ASP.NET Core应用程序应该考虑使用Serilog.AspNetCore,该程序包含此软件包并包括其他针对ASP.NET Core的特性。 - ˈvɔlə
谢谢!我忘记了 builder.Host.UseSerilog(); - ˈvɔlə
太棒了,手动添加using Serilog;就解决了问题。之前我无法获得.UseSerilog()的智能提示建议。 - Gabriel Weidmann

9
我使用了以下代码片段来解决这个问题。我将其添加到Program.cs文件中。
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
.Enrich.FromLogContext()
.CreateLogger();

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

link


1
谢谢,我没有意识到有一个ClearProviders,否则会抛出重复日志。 - maxisam

3

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

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

-1
这是我的本地日志记录配置。 首先配置日志记录器:
Log.Logger = new LoggerConfiguration().WriteTo.File(
    path: "c:\\hotellisting\\log\\log-.txt",
    outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}",
    rollingInterval: RollingInterval.Day,
    restrictedToMinimumLevel: LogEventLevel.Warning
    ).CreateLogger();

然后将Serilog添加到构建器日志记录中:
builder.Logging.AddSerilog();

记录日志:
Log.Error("error occured while bla bla");

-2
//serilog
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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接