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

标签 c# .net logging serilog seq-logging

我正在将 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/

相关文章:

c# - 在现有应用程序中使用 Silverlight

C# 将 Action<int> 转换为 lambda

c# - 构建时将库项目复制到子文件夹而不是根目录

c# - 如何自定义 Lucene.NET 以搜索不区分大小写的带符号的单词(例如 "C#"或 ".net")?

python - 使用 MemoryHandler 和 FileHandler 手动设置 Python 日志记录

c# - 可以从 System.ArgumentException 派生吗?

c# - 适用于 Windows 7 的 Microsoft Windows SDK 是否包含用于 MS 单元测试的库?

c# - SqlConnection 是如何管理 IsolationLevel 的?

linux - 如何在 Linux/bash 中为 shell 脚本创建状态日志

azure - ARM 模板是否提供了在创建资源期间捕获日志的方法