Logging 在.Net core中使用Serilog时侦听器的相关Id

Logging 在.Net core中使用Serilog时侦听器的相关Id,logging,.net-core,correlation,serilog,Logging,.net Core,Correlation,Serilog,我有一个.net核心控制台应用程序,它是RabbitMQ的侦听器。我还使用Serilog进行日志记录。将消息推入队列的API将相关ID作为一个参数添加到消息中。在编写日志时,我希望将CorrelationID(在serilog config的输出模板中指定)替换为消息中的可用ID,以便端到端跟踪操作。有人能提出一个实现这一目标的方法吗 注意:如果它是一个web请求,Serilog提供的中间件(作用域中间件或LogContext)将起到帮助作用。但是,它们需要HttpContext(出于明显的原因

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

注意:如果它是一个web请求,Serilog提供的中间件(作用域中间件或LogContext)将起到帮助作用。但是,它们需要HttpContext(出于明显的原因)。对于这种侦听器请求,我一直在寻找解决方案


非常感谢您提供的任何帮助

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

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

您还可以选择与给定消息关联的消息模板中未使用的任何属性(但听起来您已经介绍过了)

非常感谢您的建议。这很有魅力。我想知道这是否可以从主代码中删除(比如我们如何在web应用程序中使用中间件)。这只是为了确保其他模块在Startup.cs这样的公共位置复制相同的内容,而不是找到包含此更改的ProcessMessage的确切位置。是的,如果HTTP req处理器的比例为1:1,您可以利用它制作一个中间件,但我要说的是,对于消息处理循环,内联操作是一个很自然的地方,因为
Dispose
分层非常重要,所以最好将其内联是我的默认方法Sure Ruben。谢谢你的建议