В настоящее время мы запускаем веб-приложение ASP.NET Core 3, которое использует MassTransit. Мы выбрали Serilog для нашей библиотеки журналов, и он по большей части отлично работает. Мы обнаружили небольшой крайний случай, когда он не может регистрировать определенные ошибки. В нашем Program.cs
(фрагмент кода ниже) мы инициализируем статический регистратор, пока служба все еще запускается, и она без проблем регистрируется в консоли.
Если исключение выбрасывается в ConfigureServices
методе Startup.cs
, служба уничтожается, и исключение выводится на консоль, как ожидалось. Однако, если в методе 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
, вызовет эту проблему. Вот версии, которые мы сейчас используем:
- MassTransit 7.1.4
- MassTransit RabbitMq 7.1.4
- Serilog 2.10.0
Возможно, кто-то здесь сталкивался с этой проблемой раньше? Любая помощь будет оценена ????