如何使用Serilog记录MassTransit CorrelationId?

时间:2018-02-22 00:23:43

标签: masstransit serilog

我正在使用MassTransit 3.5.7。我在启动总线之前添加了相关ID:

MessageCorrelation.UseCorrelationId<ICustomerRegistered>(x => x.CustomerGuid);
MessageCorrelation.UseCorrelationId<ICustomerUpdated>(x => x.Customer.Guid);
MessageCorrelation.UseCorrelationId<IOrderPaid>(x => x.OrderGuid);
MessageCorrelation.UseCorrelationId<IOrderPaymentAuthorized>(x => x.OrderGuid);
MessageCorrelation.UseCorrelationId<IOrderPlaced>(x => x.Order.OrderGuid);
MessageCorrelation.UseCorrelationId<IOrderRefunded>(x => x.OrderGuid);

我使用Serliog 2.5.0进行记录:

Bus.Factory.CreateUsingAzureServiceBus(serviceBus =>
{
    serviceBus.UseSerilog();
    ...
}

我可以看到CorrelationId已添加到邮件标题中,但它不会作为自定义属性添加到日志中。

为了记录所有已记录消息的CorrelationId,我需要做什么?

更新

我实现了一个Serilog richher和一个MassTransit自定义中间件,如here,但相关ID只记录在收到的(消费的)消息中。发布消息时不会记录它。有谁知道如何在发布消息时记录相关ID?

1 个答案:

答案 0 :(得分:1)

您可以在自定义masstransit过滤器中执行此操作。 如果您设置过滤器

cfg.ConfigureSend(c => c.UseSendFilter(new YourSendFilter()));

或发布

cfg.ConfigurePublish(c => c.UseSendFilter(new YourSendFilter()));