LoggerDbContext 1.3.7

dotnet add package LoggerDbContext --version 1.3.7
                    
NuGet\Install-Package LoggerDbContext -Version 1.3.7
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LoggerDbContext" Version="1.3.7" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LoggerDbContext" Version="1.3.7" />
                    
Directory.Packages.props
<PackageReference Include="LoggerDbContext" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add LoggerDbContext --version 1.3.7
                    
#r "nuget: LoggerDbContext, 1.3.7"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package LoggerDbContext@1.3.7
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=LoggerDbContext&version=1.3.7
                    
Install as a Cake Addin
#tool nuget:?package=LoggerDbContext&version=1.3.7
                    
Install as a Cake Tool

LoggerDbContext

Biblioteca reutilizável para logging com correlação de IDs e persistência em banco de dados para aplicações .NET.

Características

  • ✅ Logging assíncrono em banco de dados
  • ✅ Suporte a Correlation ID para rastreamento de requisições
  • ✅ Configurável e reutilizável
  • ✅ Suporte a múltiplos providers de banco de dados (PostgreSQL, SQL Server, MySQL, etc.)
  • ✅ Captura automática de informações do HttpContext
  • ✅ Níveis de log configuráveis

Instalação

Via NuGet

dotnet add package LoggerDbContext

Via Referência de Projeto

Adicione uma referência ao projeto LoggerDbContext no seu .csproj:

<ItemGroup>
  <ProjectReference Include="..\LoggerDbContext\LoggerDbContext.csproj" />
</ItemGroup>

Configuração

1. Configurar o Banco de Dados

PostgreSQL

Primeiro, adicione o pacote NuGet do PostgreSQL:

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL

No seu Program.cs ou Startup.cs:

using LoggerDbContext.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Configurar LoggerDbContext com PostgreSQL
builder.Services.AddLoggerDbContextWithPostgreSQL(
    connectionString: builder.Configuration.GetConnectionString("DefaultConnection"),
    configureOptions: options =>
    {
        options.ServiceName = "MinhaAplicacao";
        options.MinimumLogLevel = LogLevel.Information;
        options.CaptureHttpContextInfo = true;
        options.CorrelationIdHeaderName = "X-Correlation-ID";
    }
);

var app = builder.Build();

// Adicionar middleware de Correlation ID
app.UseLoggerDbContextCorrelationId();

app.Run();
SQL Server

Adicione o pacote NuGet:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Configure no Program.cs:

using LoggerDbContext.Extensions;
using Microsoft.EntityFrameworkCore;

builder.Services.AddLoggerDbContext(
    options => options.UseSqlServer(connectionString),
    configureOptions: options =>
    {
        options.ServiceName = "MinhaAplicacao";
        options.MinimumLogLevel = LogLevel.Information;
    }
);
MySQL

Adicione o pacote NuGet:

dotnet add package Pomelo.EntityFrameworkCore.MySql

Configure no Program.cs:

using LoggerDbContext.Extensions;
using Pomelo.EntityFrameworkCore.MySql;

builder.Services.AddLoggerDbContext(
    options => options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)),
    configureOptions: options =>
    {
        options.ServiceName = "MinhaAplicacao";
    }
);

2. Criar e Aplicar Migrações

dotnet ef migrations add InitialCreate --project LoggerDbContext
dotnet ef database update --project LoggerDbContext

Ou se estiver usando em outro projeto:

dotnet ef migrations add InitialCreate
dotnet ef database update

3. Usar o Logger

Usando ILogger padrão

O logger é automaticamente registrado e captura logs automaticamente:

public class MeuController : ControllerBase
{
    private readonly ILogger<MeuController> _logger;

    public MeuController(ILogger<MeuController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IActionResult Get()
    {
        _logger.LogInformation("Requisição recebida");
        return Ok();
    }
}
Usando ICorrelationLogger

Para logs com Correlation ID explícito:

public class MeuController : ControllerBase
{
    private readonly ICorrelationLogger _correlationLogger;

    public MeuController(ICorrelationLogger correlationLogger)
    {
        _correlationLogger = correlationLogger;
    }

    [HttpGet]
    public IActionResult Get()
    {
        _correlationLogger.LogInformation("Requisição processada com sucesso");
        return Ok();
    }
}

Opções de Configuração

LoggerDbContextOptions

Propriedade Tipo Padrão Descrição
ServiceName string "Application" Nome do serviço/aplicação que está gerando os logs
MinimumLogLevel LogLevel LogLevel.Information Nível mínimo de log a ser registrado no banco
CorrelationIdHeaderName string "X-Correlation-ID" Nome do header HTTP para Correlation ID
CaptureHttpContextInfo bool true Se deve capturar informações adicionais do HttpContext (RequestPath, HttpMethod, UserId)

Estrutura da Tabela

A biblioteca cria automaticamente a tabela ApplicationLogs com os seguintes campos:

  • Id (long) - Chave primária
  • CorrelationId (string, 50) - ID de correlação da requisição
  • ServiceName (string, 100) - Nome do serviço
  • LogLevel (string, 20) - Nível do log (Information, Warning, Error, etc.)
  • Message (string) - Mensagem do log
  • Exception (string, nullable) - Stack trace da exceção (se houver)
  • Timestamp (DateTime) - Data e hora do log (UTC)
  • UserId (string, 100, nullable) - ID do usuário (se disponível)
  • RequestPath (string, 500, nullable) - Caminho da requisição HTTP
  • HttpMethod (string, 10, nullable) - Método HTTP (GET, POST, etc.)
  • Duration (int, nullable) - Duração da requisição em milissegundos

Exemplos de Uso

Exemplo Completo - Program.cs

using LoggerDbContext.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Adicionar serviços
builder.Services.AddControllers();

// Configurar LoggerDbContext
builder.Services.AddLoggerDbContextWithPostgreSQL(
    connectionString: builder.Configuration.GetConnectionString("LogDb"),
    configureOptions: options =>
    {
        options.ServiceName = "ApiGateway";
        options.MinimumLogLevel = LogLevel.Warning; // Apenas Warning e Error
        options.CaptureHttpContextInfo = true;
    }
);

var app = builder.Build();

// Configurar pipeline
app.UseHttpsRedirection();
app.UseAuthorization();

// Adicionar middleware de Correlation ID (deve vir antes dos controllers)
app.UseLoggerDbContextCorrelationId();

app.MapControllers();

app.Run();

Exemplo com Configuração Customizada

builder.Services.AddLoggerDbContext(
    options =>
    {
        // Configurar provider customizado
        options.UseNpgsql(connectionString, npgsqlOptions =>
        {
            npgsqlOptions.CommandTimeout(30);
            npgsqlOptions.EnableRetryOnFailure(maxRetryCount: 3);
        });
    },
    configureOptions: options =>
    {
        options.ServiceName = Environment.GetEnvironmentVariable("SERVICE_NAME") ?? "MyService";
        options.MinimumLogLevel = LogLevel.Error; // Apenas erros
        options.CorrelationIdHeaderName = "X-Request-ID";
        options.CaptureHttpContextInfo = false; // Não capturar info do HttpContext
    }
);

Middleware de Correlation ID

O middleware CorrelationIdMiddleware automaticamente:

  1. Verifica se existe um Correlation ID no header da requisição
  2. Se não existir, gera um novo GUID
  3. Adiciona o Correlation ID ao contexto da requisição
  4. Adiciona o Correlation ID ao header de resposta
  5. Adiciona o Correlation ID ao Activity (para tracing distribuído)

Troubleshooting

Erro: "UseNpgsql não encontrado"

Certifique-se de que o pacote Npgsql.EntityFrameworkCore.PostgreSQL está instalado no projeto que usa a biblioteca.

Logs não aparecem no banco

  1. Verifique se o MinimumLogLevel está configurado corretamente
  2. Verifique se a conexão com o banco está funcionando
  3. Verifique se as migrações foram aplicadas
  4. Verifique os logs do console para erros de fallback

Correlation ID sempre "N/A"

Certifique-se de que o middleware UseLoggerDbContextCorrelationId() está configurado antes dos controllers no pipeline.

Licença

Este projeto está sob licença MIT.

Contribuindo

Contribuições são bem-vindas! Por favor, abra uma issue ou pull request.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.3.7 132 2/19/2026
1.3.6 111 2/17/2026
1.3.5 112 2/17/2026
1.3.4 109 2/17/2026
1.2.4 112 2/16/2026
1.2.3 113 2/16/2026
1.2.2 105 2/16/2026
1.2.1 110 2/16/2026
1.2.0 108 2/16/2026
1.0.0 105 2/16/2026