c# - 使用Serilog的BeginScope

标签 c# logging serilog

我想直接在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/

相关文章:

c# - 如何检测一个游戏对象何时进入另一个游戏对象的区域?

c# - 从 List<MyType> 到 IEnumerable<MyType> 返回到 List<MyType> 的转换无效,为什么?

c# - TransactionScope 和 "durable resources"

java - 如何将所有logback错误放入字符串中

c# - 从 Program.cs 中的 appsettings 获取 Serilog 设置

c# - 如何在没有 ClickOnce 的情况下自动更新应用程序?

c# - Entity Framework Core 3.1 - 有关命令和事务的日志信息

python - 在post_save信号django中捕获logentry历史

asp.net-core - 如何添加HttpContext丰富未处理的异常日志?

c# - 在运行 Asp.Net Core 2 的 Webapi 2 上使用 Serilog 的 DI ILogger