Provedores e configuração
ResumoProvedores de log definem para onde as mensagens vão (console, arquivo, sistemas externos). Os níveis são filtrados por configuração no
appsettings.json. Bibliotecas como Serilog ampliam os destinos e formatos.
1. Objetivos de Aprendizagem#
- Configurar níveis de log por categoria via
appsettings.json. - Conhecer provedores nativos e de terceiros.
- Entender o papel do Serilog e do logging estruturado em produção.
2. Pré-requisitos#
- Log estruturado (tópico 14.2).
3. Conceito#
- Provedores: destinos das mensagens. Nativos incluem Console e Debug; provedores externos gravam em arquivos, bancos ou plataformas de observabilidade.
- Filtro por configuração: a seção
Loggingdoappsettings.jsondefine o nível mínimo por categoria — por exemplo, silenciar o ruído do framework e manter os logs da sua aplicação.
O porquê: separar "o que logar" (no código) de "para onde e em que nível" (na configuração) permite ajustar sem recompilar. Serilog é a escolha popular para logging estruturado rico (sinks para arquivo, Seq, Elastic, etc.).
4. Mão na Massa#
4.1. Setup#
dotnet new console -n Catalog.LogConfig
cd Catalog.LogConfig
dotnet add package Microsoft.Extensions.Hosting
4.2. Implementação Passo a Passo#
- Filtro de níveis no
appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Catalog": "Debug"
}
}
}
Default— nível base.Microsoft.AspNetCore— reduz o ruído do framework aWarning.Catalog— logs do seu código descem aDebug.
- O host já lê essa seção automaticamente:
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
// builder.Logging já configurado a partir de appsettings.json
var host = builder.Build();
- Trocar para Serilog (visão geral):
dotnet add package Serilog.Extensions.Hosting
dotnet add package Serilog.Sinks.Console
Configurar Serilog substitui os provedores nativos, mantendo a mesma API ILogger<T> no seu código — ou seja, você não muda seus logs, só o destino/formatação.
4.3. Executando#
dotnet run
5. Exemplo Completo#
Definir Catalog: Debug e Microsoft.AspNetCore: Warning no appsettings.json faz seus logs aparecerem em detalhe enquanto silencia o ruído do framework — tudo sem tocar no código.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
| Filtrar níveis por categoria na configuração | Deixar o framework logar tudo em Information |
Programar contra ILogger (independe do provedor) | Acoplar o código a uma biblioteca de log específica |
| Serilog/estruturado para produção | Depender só do console em produção sem retenção |
Notacomo seu código usa a abstração
ILogger<T>, trocar o provedor (nativo → Serilog) não exige alterar as chamadas de log — só a configuração de inicialização.
7. Segurança e Produção#
- Em produção, use um provedor com retenção e busca (arquivo rotacionado ou plataforma de observabilidade). Console puro se perde ao reiniciar o processo.
- Configure a retenção conforme políticas de compliance (LGPD) e nunca registre segredos/PII.
8. Exercícios#
- Fácil: ajuste o nível
Defaultnoappsettings.jsone observe o efeito. - Médio: reduza o ruído de uma categoria do framework para
Warning. - Desafio: adicione Serilog com sink de console e confirme que seus logs
ILogger<T>continuam funcionando sem alteração no código.
9. Resumo#
Provedores definem destinos; a seção Logging filtra níveis por categoria via configuração. Programar contra ILogger<T> permite trocar o provedor (ex.: Serilog) sem mudar os logs.
10. Próximos Passos#
Último módulo dos fundamentos: garantir qualidade com testes automatizados.
11. Referências#
- Microsoft Learn — Provedores de logging
- Microsoft Learn — Configuração de logging
- Serilog — Documentação oficial