DEV Community

Fernando Mendes
Fernando Mendes

Posted on

Utilizando Log em ASP .NET Core

Olá pessoal, o Asp .NET Core contempla várias funcionalidades nativas que anteriormente precisávamos baixar referências de terceiros como por exemplo:

  • Injeção de Dependências (Simple Injector, AutoFac, etc…)
  • Log (NLog, elmah.io, e etc…) … e algumas outras mais…

Neste post vou falar sobre uma delas, que é o Log! Em desenvolvimento de sistemas, precisamos muitas vezes logar a entrada de dados de uma API, ou logar uma exceção para analisar o que pode estar acontecendo dentro de um fluxo do sistema e etc..

O Log do Asp .NET Core, funciona em vários providers:

  • Console
  • Depurar
  • EventLog
  • AzureAppServices
  • TraceSource
  • EventSource

No exemplo abaixo vou mostrar, como se loga via console do Visual Studio:
Pelo Visual Studio vamos criar uma WebApi em Asp .NET Core

Criação da API

Alt Text

Estrutura da API

Alt Text

Edite o arquivo Startup.cs, adicione o using Microsoft.Extensions.Logging e no método Configure, adicione um novo parâmetro: ILoggerFactory loggerFactory

E adicione no método as configurações de Console e Debug, desta forma o Log vai ser feito pelo Console do Visual Studio em tempo de depuração.

Alteração do método Main()

Alt Text

Vamos criar uma nova controller para API chamada Cidade, e vamos injetar o ILogger no construtor da controller

Injeção da interface do ILogger

Alt Text

Adicionei um método GET na API, e vou logar como informação o Id que está sendo passado ao método.

Log de informação com Id de Evento

Alt Text

Ao executar o método na API, o Log é executado no console do Visual Studio em tempo de depuração:

Log no console do Visual Studio

Alt Text

Obs: O ILogger tem várias categorias, além do Information que são:

  • Error
  • Critical
  • Trace
  • Warning
  • Debug

Ótimo, mas além logar somente em debug não me adianta muita coisa, quero e preciso logar todas as entradas na API, e também logar todas as exceções que possam acontecer na aplicação.
Para isso, temos que criar uma extensão do ILogger e fazer com que o provider salve os dados do log em um banco de dados. Com isso criei esta estrutura na solução:

Alt Text

Para criar a extensão, temos que usar o ILoggerFactory para criar um novo contexto, um novo provider para configurar o Log a ser registrado em um banco de dados.

Essa configuração está na classe AppLoggerExtensions

Configurar um novo contexto de Log

Alt Text

Depois temos que sobrescrever o método de Log, herdando do ILoggerProvider
Essa implementação está na classe AppLoggerProvider

Sobrescrevendo o método de criar Log

Alt Text

Para depois de fato criar o Log no banco de dados, obtendo as informações que foram colocadas no Log, também sobrescrevendo o método de Log, herdando de ILogger

Essa implementação está na classe AppLogger

Sobrescrevendo o método de criar Log

Alt Text

Criei também, um repositório para executar o log no banco de dados.

Para isso, criei uma tabela em meu banco de dados chamada EventLog, com essa estrutura:

Tabela de Log

Alt Text

Criei uma entidade LogEvento, para ser de model da tabela

Entidade LogEvento

Alt Text

Na classe RepositorioLogger existe um método para executar o comando no banco.

Alt Text

Antes de rodar a API, precisamos adicionar esse novo provider nas configurações da API. Edite o arquivo Startup.cs e adicione o novo contexto, passando a string de conexão de seu banco de dados.

Alt Text

Enfim, rodando a aplicação e executando a API, o Log é inserido na tabela EventLog.

Executando a API pelo Postman

Alt Text

Log na tabela do banco de dados, como no exemplo acima tínhamos escrito.

Controller da API

Alt Text

Log incluído na tabela

Alt Text

Fazendo corretamente as configurações, vocês terão controle de Log em sua aplicação de forma fácil e simples, sem depender de Dlls de terceiros ou fazer na mão.

Espero que tenham gostado do artigo e até a próxima!

Segue o fonte de exemplo em meu Github
Marraia-Log

Top comments (0)