Pular para o conteúdo
.NETILogger e níveis de log
Módulo 02Fundamentos de Aplicação

ILogger e níveis de log

iniciante 20 min de leitura·Atualizado · .NET 9
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ívelUso
Tracedetalhes finíssimos (diagnóstico profundo)
Debuginformação útil em desenvolvimento
Informationeventos normais do fluxo
Warningalgo inesperado, mas recuperável
Errorfalha em uma operação
Criticalfalha 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#

Shell
dotnet new console -n Catalog.Logging
cd Catalog.Logging
dotnet add package Microsoft.Extensions.Hosting

4.2. Implementação Passo a Passo#

  1. Obter um logger via DI:
C#
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>>();
  1. Registrar em vários níveis:
C#
logger.LogInformation("Aplicação iniciada.");
logger.LogWarning("Estoque baixo para o produto {ProdutoId}.", 42);
logger.LogError("Falha ao processar o pedido {PedidoId}.", 7);
  1. Em uma classe, injetar no construtor:
C#
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#

Shell
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çaEvite
Injetar ILogger por construtorUsar Console.WriteLine para logging de aplicação
Escolher o nível certo para cada eventoLogar tudo como Information (ruído) ou Error
Reservar Critical para falhas gravesRegistrar informação sensível em qualquer nível
Atenção

o 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/Trace podem 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.json e 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#

14-01 — ILogger e níveis de log | Curso ASP.NET Core