C# 使用属性丰富Seq log语句,但不在消息行中包含它们(使用Serilog)

C# 使用属性丰富Seq log语句,但不在消息行中包含它们(使用Serilog),c#,.net,logging,serilog,seq-logging,C#,.net,Logging,Serilog,Seq Logging,我将Serilog与Seq一起使用,并希望用我自己的属性丰富Seq中出现的日志记录 如果我输入一个日志语句,如 Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName); 在Seq中我得到 请注意,站点和活动值在Seq中显示为丰富属性,但它们也显示在整个消息中 如何记录获取丰富属性的位置,而不让值显示在文本消息行中?注意,我有一个NuGet包,它为每个调用添加了一个ThreadId。我希望站点和活动属性

我将Serilog与Seq一起使用,并希望用我自己的属性丰富Seq中出现的日志记录

如果我输入一个日志语句,如

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);
在Seq中我得到

请注意,站点和活动值在Seq中显示为丰富属性,但它们也显示在整个消息中

如何记录获取丰富属性的位置,而不让值显示在文本消息行中?注意,我有一个NuGet包,它为每个调用添加了一个ThreadId。我希望站点和活动属性在丰富的道具列表中,但不一定打印在消息行中

解决这个问题可能还需要了解我们的应用程序

该应用程序是一个windows服务,可生成多个执行不同操作的活动。因此,windows服务协调其中包含的各种活动。在一个时间表上,它只是在每个活动上调用“进程”来启动并完成一些工作。每次Orchestrator调用流程时,我都需要该活动的所有日志记录自动包括如上所示的站点和活动值(以及更多属性值,但我不希望将其全部打印在消息行中)

因此,与上面的条目相反,我们将看到。。。 请注意,消息现在只显示“ProcessCycle”

需要更改为:

Log.ForContext("Site",SiteName)
    .ForContext("Activity",ActivityName)
    .Information("ProcessCycle")
按你的意愿呈现

您还可以执行
Enrich.FromLogContext
LogContext.PushProperty
以更全局地执行此操作(搜索这两个字符串以查找示例)

由约翰·利弗莫尔添加

有关FromLogContext和其他方法的更多信息,请访问。。。


FromLogContext创建一个ILogger,可在后续日志调用的作用域中使用。

您希望数据去/去哪里?你能做一个你喜欢的文本标记呈现吗(例如,我不知道你是想要分割属性集还是它们只是为了内部消费等等)我更新了我的问题,以包括我们想要的日志条目的外观。这是否回答了您的问题?同时,实现ILogEventEnricher并将其作为参数传递给FrimContext方法可能有助于从一个“作用域”向消息统一添加属性
Log.ForContext("Site",SiteName)
    .ForContext("Activity",ActivityName)
    .Information("ProcessCycle")