using Microsoft.AspNetCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Formatting.Elasticsearch; using Serilog.Formatting.Json; using Serilog.Settings.Configuration; using Serilog.Sinks.Elasticsearch; using Serilog.Sinks.RollingFile; using System; using System.IO; using System.Text; namespace Platform { public class Program { public static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; IConfigurationRoot config = GetConfig(); Log.Logger = GetLogger(config); try { Log.Information("web host start"); WebHost.CreateDefaultBuilder(args) .UseConfiguration(config) .UseSerilog() .UseStartup() .Build() .Run(); Log.Information("web host end"); } catch (Exception ex) { Log.Fatal(ex, "Host terminated unexpectedly"); return; } finally { Log.CloseAndFlush(); } } private static IConfigurationRoot GetConfig() { return new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true) .Build(); } private static ILogger GetLogger(IConfigurationRoot config) { return new LoggerConfiguration() .ReadFrom.Configuration(config, ConfigurationAssemblySource.AlwaysScanDllFiles) .WriteTo.Console() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(config.GetConnectionString("Log"))) { AutoRegisterTemplate = true, AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7, CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true), FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate), EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |EmitEventFailureHandling.WriteToFailureSink | EmitEventFailureHandling.RaiseCallback, FailureSink = new RollingFileSink("logs/log.json", new JsonFormatter(), 100 * 1024 * 1024, 1, Encoding.UTF8) }) .CreateLogger(); } } }