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

Is it possible to only display SourceContext in Serilog if ForContext<class> has been defined

我是 Serilog 的新手,我很难只在需要时显示 class 名称,而不必在每条日志消息中添加 {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();

我希望只有在指定了 class 时才会显示 class 名称,如此处所示。

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

并且如果日志是这样创建的就不显示了。

Log.Verbose("message");

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

这可能是 ColoredConsoleSink 中的错误 - 通常在呈现输出标记时,缺失值将留空。

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

您可以尝试切换到 Literate Console sink (https://github.com/serilog/serilog-sinks-literate),我认为它没有这个错误。