ILogger e níveis de log
Resumo
ILogger<T>é a abstração de logging do .NET, injetada via DI. Cada mensagem tem um nível (Trace, Debug, Information, Warning, Error, Critical) que permite filtrar o que aparece por ambiente.
1. Objetivos de Aprendizagem#
- Injetar e usar
ILogger<T>. - Escolher o nível de log adequado.
- Filtrar níveis por configuração.
2. Pré-requisitos#
- Injeção de dependência (Módulo 12).
3. Conceito#
ILogger<T> (onde T é a classe que loga, para dar contexto de categoria) é resolvido pelo container de DI. Cada registro tem um nível de severidade:
| Nível | Uso |
|---|---|
Trace | detalhes finíssimos (diagnóstico profundo) |
Debug | informação útil em desenvolvimento |
Information | eventos normais do fluxo |
Warning | algo inesperado, mas recuperável |
Error | falha em uma operação |
Critical | falha grave que exige ação imediata |
O porquê dos níveis: em produção você registra Information e acima; em desenvolvimento, desce a Debug/Trace — sem mudar o código.
4. Mão na Massa#
4.1. Setup#
dotnet new console -n Catalog.Logging
cd Catalog.Logging
dotnet add package Microsoft.Extensions.Hosting
4.2. Implementação Passo a Passo#
- Obter um logger via DI:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var host = Host.CreateApplicationBuilder(args).Build();
var logger = host.Services.GetRequiredService<ILogger<Program>>();
- Registrar em vários níveis:
logger.LogInformation("Aplicação iniciada.");
logger.LogWarning("Estoque baixo para o produto {ProdutoId}.", 42);
logger.LogError("Falha ao processar o pedido {PedidoId}.", 7);
- Em uma classe, injetar no construtor:
public class ServicoProduto
{
private readonly ILogger<ServicoProduto> _logger;
public ServicoProduto(ILogger<ServicoProduto> logger) => _logger = logger;
public void Criar(string nome)
{
_logger.LogInformation("Criando produto {Nome}", nome);
}
}
4.3. Executando#
dotnet run
5. Exemplo Completo#
Injetar ILogger<ServicoProduto> e registrar LogInformation("Criando produto {Nome}", nome) dá logs com categoria (a classe) e nível — prontos para filtrar por ambiente.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
Injetar ILogger por construtor | Usar Console.WriteLine para logging de aplicação |
| Escolher o nível certo para cada evento | Logar tudo como Information (ruído) ou Error |
Reservar Critical para falhas graves | Registrar informação sensível em qualquer nível |
Atençãoo parâmetro genérico de
ILogger<T>define a categoria do log (normalmente o nome completo da classe), essencial para filtrar e localizar a origem.
7. Segurança e Produção#
- Em produção, o nível padrão costuma ser
Information.Debug/Tracepodem expor detalhes internos e degradar desempenho — mantenha-os para desenvolvimento.
8. Exercícios#
- Fácil: injete
ILogger<T>numa classe e logue uma informação. - Médio: registre um warning e um error com parâmetros.
- Desafio: configure o nível mínimo por
appsettings.jsone observe o filtro.
9. Resumo#
ILogger<T> é a abstração de logging injetada via DI; os níveis (Trace→Critical) permitem filtrar por ambiente sem alterar código. Use a classe como categoria.
10. Próximos Passos#
A seguir, logging estruturado — o jeito certo de incluir dados nas mensagens.
11. Referências#
- Microsoft Learn — Logging no .NET
- Microsoft Learn — Níveis de log (LogLevel)
- Microsoft Learn — Logging no ASP.NET Core