在.Net core中使用Serilog时,侦听器的相关ID

时间:2019-01-24 03:44:41

标签: logging .net-core correlation serilog

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

注意:如果是Web请求,Serilog提供的中间件(范围内的中间件或LogContext)可助您一臂之力。但是,它们需要HttpContext(出于明显的原因)。对于这种监听器请求,我很想找到解决方法

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

在您收到消息的那一点,您应该能够

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

您还可以add a ....|{Properties} element into your log format string来获取与给定消息相关联的消息模板中未使用的任何属性(但听起来好像已经覆盖了该问题)