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

时间:2016-01-26 12:58:34

标签: c# logging serilog

我是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");

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

1 个答案:

答案 0 :(得分:2)

这可能是ColoredConsoleSink中的错误 - 通常在渲染输出标记时,缺失值将保留为空白。

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

您可能会尝试切换到我认为不存在此错误的Literate Console接收器(https://github.com/serilog/serilog-sinks-literate)。