在 MassTransit 中使用 Serilog 进行记录

Logging with Serilog in MassTransit

我尝试使用 MassTransit.SerilogIntegration nuget,但它的最新版本似乎是 5.5.6。我正在使用 MassTransit 7.1.4,当我安装了这个 Serilog nuget 时,我遇到了一个异常,它找不到 ILog 接口。有什么方法可以在当前版本的 MassTransit 上使用 Serilog 吗?

MassTransit 使用来自容器的 ILoggerFactory,因此只要配置了日志记录提供程序并且是容器的一部分,它就会被解析和使用。不管是 Serilog,还是 Microsoft Extensions Logging。

This sample 使用 Serilog——事实上我几乎所有的样本都使用它。

这可以在 Hosting 级别配置:

return Host.CreateDefaultBuilder(args)
.UseSerilog((host, log) =>
{
    if (host.HostingEnvironment.IsProduction())
        log.MinimumLevel.Information();
    else
        log.MinimumLevel.Debug();

    log.MinimumLevel.Override("Microsoft", LogEventLevel.Warning);
    log.WriteTo.Console();
})

或者在程序层面:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .MinimumLevel.Override("JobService", Serilog.Events.LogEventLevel.Debug)
    .MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Warning)
    .MinimumLevel.Override("Microsoft.EntityFrameworkCore", Serilog.Events.LogEventLevel.Warning)
    .MinimumLevel.Override("Microsoft.EntityFrameworkCore.Database.Command", Serilog.Events.LogEventLevel.Warning)
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .CreateLogger();

return Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    })
    .UseSerilog();

这些都使用了Serilog.Extensions.Logging NuGet包。 MassTransit 不再有日志特定包。