【发布时间】:2021-02-04 12:48:22
【问题描述】:
我们目前正在运行一个使用 MassTransit 的 ASP.NET Core 3 Web 应用程序。我们为我们的日志库选择了 Serilog,它在大多数情况下都很好用。我们发现了一个小的边缘情况,它无法记录某些错误。在我们的Program.cs(下面的代码 sn-p)中,我们在服务仍在启动时初始化静态记录器,它会毫无问题地记录到控制台
如果在Startup.cs 中的ConfigureServices 方法中抛出异常,则服务将被终止并按预期将异常打印到控制台。但是,如果在 MassTransit AddBus() 方法中引发异常,则不会记录任何内容。经过一些调试,我们看到我们在Program.cs 中设置的静态记录器正在被SilentLogger 替换,我们认为这可能是 MassTransit 内部的某些东西导致了这种情况
MassTransit 初始化代码也可以在下面找到
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("Starting up app");
CreateHostBuilder(args).Build().Run();
}
catch (Exception e)
{
Log.Fatal(e, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
}
serviceCollection.AddMassTransit(configurator =>
{
configurator.AddConsumers(consumerAssembly());
var queueName = appSettings.QueueName;
configurator.AddBus(provider =>
{
MessageDataDefaults.ExtraTimeToLive = TimeSpan.FromDays(1);
MessageDataDefaults.Threshold = 2000;
MessageDataDefaults.AlwaysWriteToRepository = false;
return Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var configHost = appSettings.RabbitMq.Host;
var configUser = appSettings.RabbitMq.Username;
var configPassword = appSettings.RabbitMq.Password;
cfg.Host(new Uri(configHost), h =>
{
h.Username(configUser);
h.Password(configPassword);
});
cfg.ReceiveEndpoint(queueName, ec => ec.ConfigureConsumers(provider));
});
});
serviceCollection.AddSingleton<IHostedService, BusHostedService>();
});
AddBus 方法中抛出的任何异常都会导致此问题。以下是我们目前使用的版本:
- 大众运输 7.1.4
- MassTransit RabbitMq 7.1.4
- Serilog 2.10.0
也许这里有人以前遇到过这个问题?任何帮助将不胜感激????
【问题讨论】:
标签: c# asp.net-core serilog masstransit