【发布时间】:2023-01-11 05:12:02
【问题描述】:
我正在尝试为 Serilog 设置一个接收器,它通过 MassTransit 发布日志消息。 当我尝试在启动时创建接收器时遇到问题。创建接收器会导致无限循环。
我应该如何注册依赖注入来解决这个圈子?
我认为这是因为 MassTransit.IBus 使用了 ILogger。因此,当创建记录器时,它会使用 IBus 请求我的接收器,IBus 请求记录器,后者请求 IBus,等等。
Program.cs 中的启动代码
//Code that sets up my mass transit. IBus is registered as part of it.
builder.Host.SetupMassTransit();
builder.Host.UseSerilog((ctx, services, lc) =>
{
lc.WriteTo.Sink(new MassTransitSink(services.GetService<IBus>())); //Set a breakpoint here
});
在lc.WriteTo.Sink(... 上设置一个断点,你会看到它被重复调用。
轨道交通下沉
public class MassTransitSink : ILogEventSink
{
private readonly IBus bus;
public MassTransitSink(IBus bus)
{
this.bus = bus;
}
public async void Emit(LogEvent logEvent)
{
await bus.Publish<MyLog>(new MyLog("Hello World"));
}
}
public class MyLog
{
public MyLog(string message)
{
Message = message;
}
public string Message { get; set; }
}
【问题讨论】:
标签: dependency-injection serilog masstransit