使用 Serilog 记录轨道交通

Logging Mass Transit with Serilog

我有这个控制台应用程序项目,我在其中使用 EF6 和 postgresql、QuartzMass Transit 作为 DI,我使用 Castle Winsdor。该项目的目标是定期检查一个文件夹(或多个文件夹)是否有新文件并处理它们(主要是通过将数据存储在数据库中)。

我想使用日志记录服务进行调试,然后遇到了 Serilog。我设法将它添加到 Quartz 和 EF,但是我在将它添加到 Mass Transit 时遇到了问题。

到目前为止我做了什么:

我已将 Serilog 添加为 Castle.Core.Logging

的日志记录
public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Auto(Classes.FromThisAssembly());
    var factory = container.Resolve<ILoggerFactory>();
    container.AddFacility<LoggingFacility>(f => f.LogUsing(factory as SerilogFactory));
}

然后我使用 Logger 拦截器将它添加到 EF,并使用 Serilog 设置将它添加到 Quartz。

但现在我想将它添加到我的 MassTransit Automatonymous,但我无法弄清楚它。

首先,我尝试从 BusControl 配置中添加 Serilog:

BusControl = Bus.Factory.CreateUsingInMemory(cfg =>
{
    cfg.UseSerilog(Log.Logger);  //Where `Log.Logger` is the Serilog Logger
});

但后来我遇到了一个 MassTransit.Logging.ILogger 异常也是 discussed here

在该线程中,我发现我应该通过像这样配置 MassTransit LogContext 添加 Serilog(或任何其他记录器)in a different way LogContext.ConfigureCurrentLogContext(loggerFactory);。但问题是,他们现在正在使用 Microsoft.Extensions.Logging.Abstractions 并且我无法将记录器从 Castle.Core.Logging.ILogger 转换为 Microsoft.Extensions.Logging.ILogger

有什么方法可以使用我的 Castle.Core.Logging 记录器吗?

您需要使用 Serilog.Extensions.Logging NuGet 包,它为 Serilog 添加了 ILoggerFactory 支持。您可以通过该接口通过以下方式配置 MassTransit:

LogContext.ConfigureCurrentLogContext(loggerFactory);

MassTransit 不使用任何 Castle 设施,但是,有一个 NuGet 包用于使用 ]Castle Windsor](https://masstransit-project.com/usage/containers/castlewindsor.html) 配置 MassTransit。

更新:您可以在 this sample

中查看示例 Serilog 配置