using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.eShopOnContainers.WebMVC; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Serilog; using System; using System.IO; var configuration = GetConfiguration(); Log.Logger = CreateSerilogLogger(configuration); try { Log.Information("Configuring web host ({ApplicationContext})...", Program.AppName); var host = BuildWebHost(configuration, args); Log.Information("Starting web host ({ApplicationContext})...", Program.AppName); host.Run(); return 0; } catch (Exception ex) { Log.Fatal(ex, "Program terminated unexpectedly ({ApplicationContext})!", Program.AppName); return 1; } finally { Log.CloseAndFlush(); } IWebHost BuildWebHost(IConfiguration configuration, string[] args) => WebHost.CreateDefaultBuilder(args) .CaptureStartupErrors(false) .ConfigureAppConfiguration(x => x.AddConfiguration(configuration)) .UseStartup() .UseSerilog() .Build(); Serilog.ILogger CreateSerilogLogger(IConfiguration configuration) { var seqServerUrl = configuration["Serilog:SeqServerUrl"]; var logstashUrl = configuration["Serilog:LogstashgUrl"]; var cfg = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .Enrich.WithProperty("ApplicationContext", Program.AppName) .Enrich.FromLogContext() .WriteTo.Console(); if (!string.IsNullOrWhiteSpace(seqServerUrl)) { cfg.WriteTo.Seq(seqServerUrl); } if (!string.IsNullOrWhiteSpace(logstashUrl)) { cfg.WriteTo.Http(logstashUrl); } return cfg.CreateLogger(); } IConfiguration GetConfiguration() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables(); return builder.Build(); } public class Program { private static readonly string _namespace = typeof(Startup).Namespace; public static readonly string AppName = _namespace.Substring(_namespace.LastIndexOf('.', _namespace.LastIndexOf('.') - 1) + 1); }