Skip to content

Instantly share code, notes, and snippets.

View hgmauri's full-sized avatar

Henrique Mauri hgmauri

View GitHub Profile
{
"DOTNET_ENVIRONMENT": "Development",
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"ConnectionStrings": {
public static void UseElasticApm(this IApplicationBuilder app, IConfiguration configuration)
{
app.UseAllElasticApm(configuration);
}
public static class ElasticsearchExtensions
{
public static void AddElasticsearch(this IServiceCollection services, IConfiguration configuration)
{
var settings = new ConnectionSettings(new Uri(configuration["ElasticsearchSettings:uri"]));
var defaultIndex = configuration["ElasticsearchSettings:defaultIndex"];
if (!string.IsNullOrEmpty(defaultIndex))
settings = settings.DefaultIndex(defaultIndex);
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()
var builder = WebApplication.CreateBuilder(args);
builder.AddSerilog(builder.Configuration, "API Elastic APM");
Log.Information("Starting API");
builder.Services.AddApiConfiguration();
builder.Services.AddElasticsearch(builder.Configuration);
builder.Services.AddSqlDatabase(builder.Configuration);
builder.Services.AddSwagger(builder.Configuration);
@hgmauri
hgmauri / Program.cs
Created February 28, 2024 12:43
Program.cs
try
{
var builder = WebApplication.CreateBuilder(args);
builder.AddSerilogApi(builder.Configuration);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddExceptionHandler<ErrorHandlingMiddleware>();
@hgmauri
hgmauri / ErrorHandlingMiddleware.cs
Last active February 28, 2024 12:41
ErrorHandlingMiddleware.cs
public class ErrorHandlingMiddleware : Microsoft.AspNetCore.Diagnostics.IExceptionHandler
{
public async ValueTask<bool> TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken)
{
using var property = LogContext.PushProperty("UserName", httpContext.User?.Identity?.Name ?? "anônimo");
Log.Error(exception, "Error");
var result = JsonSerializer.Serialize(new { error = exception?.Message });
httpContext.Response.ContentType = "application/json";
builder.Logging.ClearProviders();
builder.Host.UseSerilog(Log.Logger, true);
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.WithExceptionDetails()
.Enrich.WithCorrelationId()
.Enrich.WithCorrelationIdHeader()
.WriteTo.Async(wt => wt.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Properties:j}{NewLine}{Exception}", restrictedToMinimumLevel: logLevel))
.CreateLogger();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.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"])
}))
.CreateLogger();