如果定义了 ForContext,是否可以只在 Serilog 中显示 SourceContext

本文关键字:Serilog SourceContext 显示 是否 ForContext 定义 class 如果 | 更新日期: 2023-09-27 18:32:00

我是Serilog的新手,我正在努力仅在需要时显示类名,而不必向每条日志消息添加{SourceContext:l}。我知道我可以将代码编写为:

Log.ForContext<Class1>().Verbose("message {SourceContext:l}");

我有记录器设置如下:

    var log = new LoggerConfiguration()
                .MinimumLevel.Verbose()
                .WriteTo
                .ColoredConsole(outputTemplate: "{Timestamp:G} [{Level}] {SourceContext} {Message}{NewLine:l}{Exception:l}")
                .CreateLogger();

我希望只在指定类时显示类名,如下所示。

Log.ForContext<Class1>().Verbose("message");

如果创建日志,则不显示。

Log.Verbose("message");

但是,在上面的示例中,它将以以下格式打印注销日志"{SourceContext} 消息"而不仅仅是"消息",这不是我想要的。

如果定义了 ForContext<class>,是否可以只在 Serilog 中显示 SourceContext

这可能是

ColoredConsoleSink中的一个错误 - 通常在渲染输出令牌时,缺失值将留空。

提高:https://github.com/serilog/serilog/issues/649

您可以尝试切换到我认为没有此错误的识字控制台接收器 (https://github.com/serilog/serilog-sinks-literate)。