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
Estrutura da API
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()
Vamos criar uma nova controller para API chamada Cidade, e vamos injetar o ILogger no construtor da controller
Injeção da interface do ILogger
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
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
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:
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
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
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
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
Criei uma entidade LogEvento, para ser de model da tabela
Entidade LogEvento
Na classe RepositorioLogger existe um método para executar o comando no banco.
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.
Enfim, rodando a aplicação e executando a API, o Log é inserido na tabela EventLog.
Executando a API pelo Postman
Log na tabela do banco de dados, como no exemplo acima tínhamos escrito.
Controller da API
Log incluído na tabela
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)