我想直接在Serilog中使用Microsoft.Logger
具有的功能BeginScope
功能。
我知道我可以使用Microsoft ILogger
并设置Serilog作为底层记录器,但是在应用程序的这一点上太麻烦了。
我想知道Serilog中是否有BeginScope
等效项。
互联网上的信息不是直接的,有提到Serilog支持,但如果直接支持或使用Microsoft类则没有提及。
最佳答案
是的,Serilog具有此功能的 native 等效功能,称为LogContext.PushProperty()
。
要启用此功能,您首先必须将Enrich.FromLogContext()
添加到您的Serilog LoggerConfiguration
中,例如:
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext() // <- this line
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} " +
"{Properties:j}{NewLine}{Exception}"))
.CreateLogger();
然后,要将属性推送到上下文(相当于
ILogger.BeginScope()
),请使用:using (LogContext.PushProperty("OrderId", 1234))
{
Log.Information("Processing a new order");
// ...etc
}
上面的配置包括
{Properties:j}
,以确保所有事件属性(例如来自日志上下文的事件属性)都包含在输出中。您如何查看其他属性取决于您使用的接收器。
关于c# - 使用Serilog的BeginScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57791868/