首页 > 解决方案 > 在.Net核心中使用Serilog时侦听器的相关ID

问题描述

我有一个 .net 核心控制台应用程序,它是 RabbitMQ 的侦听器。另外我正在使用 Serilog 进行日志记录。将消息推送到队列中的 API 在消息中添加一个相关 ID 作为参数。在编写日志时,我希望将 CorrelationID(在 serilog 配置的输出模板中指定)替换为消息中可用的,以端到端跟踪操作。任何人都可以提出一种方法来实现这一目标吗?

注意:如果是 Web 请求,Serilog 提供的中间件(Scoped Middleware 或 LogContext)来救援。但是,它们需要 HttpContext(出于显而易见的原因)。对于这种侦听器请求,我一直在寻找解决方案

任何帮助深表感谢

标签: logging.net-corecorrelationserilog

解决方案


在您收到消息时,您应该能够

using (LogContext.PushProperty("corrId", msg.CorrId))
    ProcessMessage(msg)

您还可以在日志格式字符串中添加一个....|{Properties}元素,以获取与给定消息关联的消息模板中未使用的任何属性(但听起来您已经涵盖了)


推荐阅读