Skip to content

Instantly share code, notes, and snippets.

@hgmauri
Created April 4, 2024 11:17
Show Gist options
  • Save hgmauri/652184eedf180977604b64036ed64041 to your computer and use it in GitHub Desktop.
Save hgmauri/652184eedf180977604b64036ed64041 to your computer and use it in GitHub Desktop.
public static class SerilogExtensions
{
public static WebApplicationBuilder AddSerilog(this WebApplicationBuilder builder, IConfiguration configuration, string applicationName)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.Enrich.FromLogContext()
.Enrich.WithMachineName()
.Enrich.WithEnvironmentUserName()
.Enrich.WithExceptionDetails()
.Enrich.WithElasticApmCorrelationInfo()
.Enrich.WithProperty("ApplicationName", $"{applicationName} - {configuration.GetSection("DOTNET_ENVIRONMENT")?.Value}")
.WriteTo.Async(writeTo => writeTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(configuration["ElasticsearchSettings:uri"]))
{
CustomFormatter = new EcsTextFormatter(),
AutoRegisterTemplate = true,
IndexFormat = "indexlogs",
ModifyConnectionSettings = x => x.BasicAuthentication(configuration["ElasticsearchSettings:username"], configuration["ElasticsearchSettings:password"])
}))
.WriteTo.Async(writeTo => writeTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}"))
.CreateLogger();
builder.Logging.ClearProviders();
builder.Host.UseSerilog(Log.Logger, true);
return builder;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment