LoggerDbContext 1.2.4
See the version list below for details.
dotnet add package LoggerDbContext --version 1.2.4
NuGet\Install-Package LoggerDbContext -Version 1.2.4
<PackageReference Include="LoggerDbContext" Version="1.2.4" />
<PackageVersion Include="LoggerDbContext" Version="1.2.4" />
<PackageReference Include="LoggerDbContext" />
paket add LoggerDbContext --version 1.2.4
#r "nuget: LoggerDbContext, 1.2.4"
#:package LoggerDbContext@1.2.4
#addin nuget:?package=LoggerDbContext&version=1.2.4
#tool nuget:?package=LoggerDbContext&version=1.2.4
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áriaCorrelationId(string, 50) - ID de correlação da requisiçãoServiceName(string, 100) - Nome do serviçoLogLevel(string, 20) - Nível do log (Information, Warning, Error, etc.)Message(string) - Mensagem do logException(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 HTTPHttpMethod(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:
- Verifica se existe um Correlation ID no header da requisição
- Se não existir, gera um novo GUID
- Adiciona o Correlation ID ao contexto da requisição
- Adiciona o Correlation ID ao header de resposta
- 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
- Verifique se o
MinimumLogLevelestá configurado corretamente - Verifique se a conexão com o banco está funcionando
- Verifique se as migrações foram aplicadas
- 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 | Versions 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. |
-
net10.0
- Microsoft.AspNetCore.Http (>= 2.2.0)
- Microsoft.AspNetCore.Http.Abstractions (>= 2.3.9)
- Microsoft.EntityFrameworkCore (>= 10.0.3)
- Microsoft.EntityFrameworkCore.Abstractions (>= 10.0.3)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.3)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 10.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.