public static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) .MinimumLevel.Override("System", LogEventLevel.Warning) .MinimumLevel.Override("Microsoft.AspNetCore.Authentication", LogEventLevel.Information) .Enrich.FromLogContext() // uncomment to write to Azure diagnostics stream //.WriteTo.File( // @"D:\home\LogFiles\Application\identityserver.txt", // fileSizeLimitBytes: 1_000_000, // rollOnFileSizeLimit: true, // shared: true, // flushToDiskInterval: TimeSpan.FromSeconds(1)) .WriteTo.Console( outputTemplate: "[{Timestamp} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) .CreateLogger(); try { Log.Information("Starting host..."); var host = CreateHostBuilder(args).Build(); using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var dbContext = services.GetRequiredService <ApplicationDbContext>(); var idenityServerContext = services.GetRequiredService <ConfigurationDbContext>(); var config = services.GetRequiredService <IConfiguration>(); if (!dbContext.Roles.Any()) { Log.Information("Started Seeding Default Roles and Users"); var userManager = services.GetRequiredService <UserManager <IdentityUser> >(); var roleManager = services.GetRequiredService <RoleManager <IdentityRole> >(); await DefaultRoles.SeedAsync(userManager, roleManager); await DefaultAdminUser.SeedAsync(userManager, roleManager); } if (!idenityServerContext.Clients.Any()) { Log.Information("Started Seeding Default Identity Server"); await DefaultIdentityConfig.SeedAsync(idenityServerContext, config); } if (!dbContext.Categories.Any()) { Log.Information("Started Seeding Default Data"); await DefaultData.SeedAsync(dbContext); } Log.Information("Application Starting"); } await host.RunAsync(); } catch (Exception ex) { Log.Fatal(ex, "Host terminated unexpectedly."); } finally { Log.CloseAndFlush(); } }