mirror of
https://github.com/jcreek/aspnetcore5-with-postgres-identity-serilog-elasticsearch.git
synced 2026-07-13 10:53:44 +00:00
88 lines
3.4 KiB
C#
88 lines
3.4 KiB
C#
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Serilog;
|
|
using Serilog.Exceptions;
|
|
using Serilog.Exceptions.Core;
|
|
using Serilog.Exceptions.EntityFrameworkCore.Destructurers;
|
|
using Serilog.Sinks.Elasticsearch;
|
|
using System;
|
|
using System.Reflection;
|
|
|
|
namespace My.ProjectName
|
|
{
|
|
public class Program
|
|
{
|
|
public static void Main(string[] args)
|
|
{
|
|
// Configure logging first
|
|
ConfigureLogging();
|
|
|
|
// Then create the host, so that if the host fails we can log errors
|
|
CreateHost(args);
|
|
}
|
|
|
|
public static IHostBuilder CreateHostBuilder(string[] args) =>
|
|
Host.CreateDefaultBuilder(args)
|
|
.ConfigureWebHostDefaults(webBuilder =>
|
|
{
|
|
webBuilder.UseStartup<Startup>();
|
|
})
|
|
.ConfigureAppConfiguration(configuration =>
|
|
{
|
|
configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
|
|
configuration.AddJsonFile(
|
|
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
|
|
optional: true);
|
|
})
|
|
.UseSerilog();
|
|
|
|
private static void CreateHost(string[] args)
|
|
{
|
|
try
|
|
{
|
|
CreateHostBuilder(args).Build().Run();
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Log.Fatal($"Failed to start {Assembly.GetExecutingAssembly().GetName().Name}", ex);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
private static void ConfigureLogging()
|
|
{
|
|
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
|
|
var configuration = new ConfigurationBuilder()
|
|
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
|
.AddJsonFile(
|
|
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
|
|
optional: true)
|
|
.Build();
|
|
|
|
Log.Logger = new LoggerConfiguration()
|
|
.Enrich.FromLogContext()
|
|
.Enrich.WithExceptionDetails(new DestructuringOptionsBuilder()
|
|
.WithDefaultDestructurers()
|
|
.WithDestructurers(new[] { new DbUpdateExceptionDestructurer() }))
|
|
.Enrich.WithMachineName()
|
|
.WriteTo.Debug()
|
|
.WriteTo.Console()
|
|
.WriteTo.File("logs/log-.log", rollingInterval: RollingInterval.Day, shared: true, retainedFileCountLimit: 7)
|
|
.WriteTo.Elasticsearch(ConfigureElasticSink(configuration, environment))
|
|
.Enrich.WithProperty("Environment", environment)
|
|
.ReadFrom.Configuration(configuration)
|
|
.CreateLogger();
|
|
}
|
|
|
|
private static ElasticsearchSinkOptions ConfigureElasticSink(IConfigurationRoot configuration, string environment)
|
|
{
|
|
return new ElasticsearchSinkOptions(new Uri(configuration["ElasticConfiguration:Uri"]))
|
|
{
|
|
AutoRegisterTemplate = true,
|
|
IndexFormat = $"{Assembly.GetExecutingAssembly().GetName().Name.ToLower().Replace(".", "-")}-{environment?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}"
|
|
};
|
|
}
|
|
}
|
|
}
|