使用属性丰富Seq日志语句,但不将其包括在消息行中(使用Serilog)

时间:2018-11-14 16:36:19

标签: c# .net logging serilog seq

我正在将Serilog与Seq一起使用,并希望使用自己的属性来丰富Seq中显示的日志记录。

如果我输入类似...的日志语句

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

在Seq中,我得到...

enter image description here

请注意,“站点”和“活动”值在Seq中显示为丰富的属性,但也显示在整体消息中。

如何记录获得丰富属性的位置,但值没有出现在文本消息行中?注意,我有NuGet包,该包将ThreadId添加到每个调用。我希望“站点”和“活动”属性位于丰富的道具列表中,但不必打印在消息行中。

要获得答案,还可能需要了解我们的应用程序。

该应用程序是Windows服务,它产生多个执行不同操作的活动。因此,windows服务会编排其中包含的各种活动。在时间表上,它只是简单地在每个活动上调用“流程”以开始工作。每次由协调器调用Process时,我都需要该Activity进行的所有日志记录以自动包括如上所示的Site和Activity值(以及更多的属性值,但我不希望它们都打印在消息行中)。

因此,除了上面的条目外,我们还会看到... 请注意,消息现在仅显示“ ProcessCycle”。

enter image description here

1 个答案:

答案 0 :(得分:3)

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

需要更改为:

Log.ForContext("Site",SiteName)
    .ForContext("Activity",ActivityName)
    .Information("ProcessCycle")

根据需要渲染。

您还可以进行Enrich.FromLogContextLogContext.PushProperty来更全局地进行搜索(搜索这两个字符串以查找示例)。

由John Livermore添加

有关FromLogContext和其他方法的更多信息,请参见... https://nblumhardt.com/2016/08/context-and-correlation-structured-logging-concepts-in-net-5/

FromLogContext创建一个ILogger,该ILogger可在范围内用于后续的日志记录调用。