Инициализация подключения к базе данных .Net 6 Web Api Serilog после создания базы данных EF
При запуске моего проекта .Net 6 Web Api в файле program.cs я использую двухэтапную инициализацию из serilog-aspnetcore для первоначального вывода на консоль, а затем на втором этапе для вывода журналов в базу данных.
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateBootstrapLogger();
// down from the above, the proper logging configuration
// add logging
builder.Host.UseSerilog(
(context, services, configuration) =>
configuration.ReadFrom
.Configuration(context.Configuration, "Serilog")
.ReadFrom.Services(services)
.Enrich.FromLogContext()
);
Внутри моей конфигурации я звоню"autoCreateSqlTable": true,
Проблема в том, что только после того, как я запустилvar app = builder.Build();
что я инициализировал свою базу данных (мигрируя через EF).
// execute database initialiser to ensure database is current
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var initialiser = services.GetRequiredService<DbInitialiser>();
initialiser.Run();
}
Это вызывает ошибки, поскольку serilog пытается создать таблицу регистрации до того, как я создал базу данных.
Есть ли способ отложить переход на использование правильной конфигурации Serilog до тех пор, пока я не успешно инициализирую базу данных? Я мог бы создать таблицу журналов через EF, но я все равно буду использовать конфигурацию второго этапа до завершения установки (т.е. я хочу вести журнал консоли только до тех пор, пока не произойдет регистрация базы данных).
Я попытался запустить двухфазную инициализацию в соответствии с инструкциями, и он пытается создать таблицу журнала перед инициализацией ef.
Я попытался вручную создать регистратор после инициализации через:
Log.Logger = new LoggerConfiguration()
.ReadFrom
.Configuration(builder.Configuration, "Serilog")
.ReadFrom.Services(app.Services)
.Enrich.FromLogContext()
.CreateLogger();
Но тогда журналы в базе не создаются.