using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; using Serilog.Sinks.Elasticsearch; using System; using System.IO; namespace LifePayment.Host { public class Program { public static int Main(string[] args) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .AddEnvironmentVariables() .Build(); Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Error) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "LifePaymentService") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt", rollingInterval: RollingInterval.Day) .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(configuration["ElasticSearch:Url"])) { AutoRegisterTemplate = true, AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6, ModifyConnectionSettings = connectionSettings => { connectionSettings.BasicAuthentication(configuration["ElasticSearch:UserName"], configuration["ElasticSearch:PassWord"]); return connectionSettings; }, IndexFormat = "LifePaymentServices-log-{0:yyyy.MM}", }) .CreateLogger(); try { Log.Information("Starting LifePaymentService.Host."); CreateHostBuilder(args).Build().Run(); return 0; } catch (Exception ex) { Log.Fatal(ex, "LifePaymentService.Host terminated unexpectedly!"); return 1; } finally { Log.CloseAndFlush(); } } internal static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }) .UseAutofac() .UseSerilog(); } }