我有一个.net核心控制台应用程序,它是RabbitMQ的侦听器。另外,我正在使用Serilog进行日志记录。将消息推送到队列的API在消息中添加了一个相关ID作为一个参数。在编写日志时,我希望将CorrelationID(如serilog config的输出模板中指定的)替换为消息中可用的那个,以跟踪操作端到端。有人可以建议实现这一目标的方法吗?
注意:如果是Web请求,Serilog提供的中间件(范围内的中间件或LogContext)可助您一臂之力。但是,它们需要HttpContext(出于明显的原因)。对于这种监听器请求,我很想找到解决方法
非常感谢您的帮助
答案 0 :(得分:1)
在您收到消息的那一点,您应该能够
using (LogContext.PushProperty("corrId", msg.CorrId))
ProcessMessage(msg)
您还可以add a ....|{Properties}
element into your log format string来获取与给定消息相关联的消息模板中未使用的任何属性(但听起来好像已经覆盖了该问题)