首页 > 解决方案 > SERILOG:ForContext 和和之间的区别

问题描述

我正在使用具有以下设置的静态 Logger:

Log.Logger = new LoggerConfiguration()
.WriteTo.Seq("http://localhost:5341)
.CreateLogger();

在我的所有微服务中包含以下内容:

_log = Log.ForContext<GameBase>()
            .ForContext("CustomerID", CustomerID);

此代码在每个事件中插入一个 CustomerID 属性,而不是在消息正文中。

问题:有没有办法丰富此上下文的所有日志,以便 MESSAGE BODY 也包含此信息?就像一个会在每个消息正文前附加一个字符串的浓缩器?我真的很想在活动中看到一些项目,而不必深入研究每个活动。

此外,我没有找到太多关于 Enrichers 的文档。是否有一个不显示完整的上下文路径?

标签: serilog

解决方案


消息体是在 Sink 级别配置的,通常通过定义一个outputTemplate(如果 Sink 支持,不是所有的都支持)。通过使用,ForContext您使该CustomerID属性可用于写入此日志实例的所有消息,但在 Sink 配置中,您可以定义如何使用/显示此属性。

您可以在格式化输出下的 Serilog 文档中查看示例

格式化输出


推荐阅读