Utilizando ILogger no ASP.NET
09/02/2022
André Baltieri

O ILogger, presente no .NET (Extensions), nos permite retornar informações sobre execução, erros e avisos dos nossos sistemas de forma simples e fácil.

O que é o Logging?

O Logging é uma API ou biblioteca presente no .NET (Extensions), do qual podemos utilizar para "escrever" alguma mensagem durante a execução do nosso código.

Existem várias bibliotecas de Logging, como NLog, Log4Net e Serilog, que fazem o mesmo trabalho, porém a padrão que vem nos templates da Microsoft é o ILogger.

Instalação

A maioria dos templates vem com este pacote instalado, mas caso o seu projeto não possua a dependência, a mesma fica no Microsoft.Extensions.

dotnet add package Microsoft.Extensions

Este pacote proverá o namespace Microsoft.Extension.Logging que possui os três itens que utilizaremos aqui, ILogger, ILoggerFactory, e ILoggingProvider.

ILoggerFactory

O ILoggerFactory é a interface da qual podemos criar as instâncias do ILogger e ILoggingProvider. Ela funciona como um facilitador para registrarmos e acessarmos os loggers de forma mais fácil.

Por definição o ILoggerFactory possui apenas dois métodos, o CreateLogger que serve para criarmos um novo logger (Uma categoria para nossos logs) e o AddProvider que nos permite registrar outros provedores.

public interface ILoggerFactory : IDisposable
{
    ILogger CreateLogger(string categoryName);
    void AddProvider(ILoggerProvider provider);
}

ILoggerProvider

O ILoggerProvider server para criarmos instâncias específicas dos loggers por categoria. Ele possui apenas um método chamado CreateLogger que recebe e cria um segmento de logs.

public interface ILoggerProvider : IDisposable
{
    ILogger CreateLogger(string categoryName);
}

Porém, o ILoggerProvider do Microsoft.Extensions já possui vários provedores built-in, como:

  • Console Provider
  • Debug Provider
  • EventSource Provider
  • EventLog Provider (Windows)
  • TraceSource Provider

Caso queira criar seu próprio logger basta implementar a interface ILoggerProvider.

Utilizando o ILogger

Para utilizar o ILogger precisamos de uma instância do mesmo, e ela é dada através da class ILogger<T>, onde T normalmente é a própria classe.

Vamos tomar como base este exemplo abaixo, retirado do template padrão do ASP.NET MVC, onde temos uma instância do ILogger dentro do HomeController.

private readonly ILogger<HomeController> _logger;

Com a variável definida, podemos exigir sua instância via construtor (DI), e a biblioteca de log já fará a instância do mesmo.

public HomeController(ILogger<HomeController> logger) 
    => _logger = logger;

Para logar alguma informação, basta utilizar o método LogInformation que a mesma será exibida no Console, durante a execução da aplicação.

public IActionResult Index()
{
    _logger.LogInformation("Estou no Index do HomeController");
    return View();
}

Como resultado, temos o seguinte texto sendo exibido durante a execução da aplicação. Note a última linha contendo o texto que informamos no log anteriormente.

dotnet run

Building...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7244
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5288
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\dev\AspNetLoggerSample\
info: AspNetLoggerSample.Controllers.HomeController[0]
      Estou no Index do HomeController

Conclusão

Neste primeiro artigo da série, pudemos ver como utilizar o ILogger padrão do .NET, mas ainda temos muitas coisas para especionar. Nos próximos capítulos veremos outras configurações e loggers.

Conheça o autor

André Baltieri

Microsoft MVP

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.

An unhandled error has occurred. Reload 🗙