使用 Serilog 在 WebAPI 2 中记录重要信息

Logging important info in WebAPI 2 using Serilog

刚开始使用 Serilog,它很不错,但我有点困惑。

万一我的 Controller 操作出错,我想从请求(headers、参数等)中记录尽可能多的有用信息.

最好的解决方法是什么?

您可以考虑使用 Enrichment 功能

根据 link 的文档,您可以构建类似于

的记录器
var log = new LoggerConfiguration()
.Enrich.WithThreadId()
.WriteTo.Console()
.CreateLogger();

"All events written through log will carry a property ThreadId with the id of the managed thread that wrote them. (By convention, any .WithXyz() methods on Enrich create properties named Xyz.)"

Github 上的一个例子是 SerilogWeb.Classic。它提供了一些丰富的内容来从请求中捕获某些信息,例如

var log = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.Enrich.With<HttpRequestIdEnricher>()
.Enrich.With<UserNameEnricher>()
.CreateLogger();

您可以遵循类似的方法,创建一个 enricher 来捕获您始终希望在日志中输出的信息,然后使用该 enricher 初始化您的记录器。