gpt4 book ai didi

c# - 使用属性丰富 Seq 日志语句,而无需将它们包含在消息行中(使用 Serilog)

转载 作者:行者123 更新时间:2023-11-30 21:31:24 25 4
gpt4 key购买 nike

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

如果我输入一条日志语句,例如...

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

在 Seq 中我得到...

enter image description here

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

如何记录获得丰富属性的位置,但这些值不会出现在文本消息行中?请注意,我有 NuGet 包,它向每个调用添加一个 ThreadId。我希望 Site 和 Activity 属性位于丰富的 props 列表中,但不一定打印在消息行中。

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

该应用程序是一个 Windows 服务,它生成多个执行不同操作的事件。因此,Windows 服务会协调其中包含的各种事件。在时间表上,它只需调用每个事件的“流程”即可开始并完成一些工作。每次编排器调用 Process 时,我都需要该 Activity 的所有日志记录自动包含上面所示的站点和 Activity 值(以及更多属性值,但我不希望将其全部打印在消息行中)。

因此,我们不会看到上面的条目,而是......请注意,该消息现在仅显示“ProcessCycle”。

enter image description here

最佳答案

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

需要更改为:

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

按照您的意愿进行渲染。

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

由约翰·利弗莫尔添加

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

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

关于c# - 使用属性丰富 Seq 日志语句,而无需将它们包含在消息行中(使用 Serilog),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53304884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com