Инициализация подключения к базе данных .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();

Но тогда журналы в базе не создаются.

0 ответов

Другие вопросы по тегам