Criando Logs
Logs nos ajudam a descobrir o que deu errado durante a execução de uma aplicação, e nessa etapa iremos desenvolver o nosso serviço de log, usando o NLog.
Vamos começar criando dois projetos, o primeiro chamado Contracts, onde teremos as interfaces do nosso serviço de log. No segundo, de nome LoggerService, iremos escrever a nossa lógica. Ambos projetos são do tipo ‘Class Library’.
Com os dois projetos criados, precisamos fazer as referências necessárias. Navegue até o explorador de soluções. Em seguida, no projeto LoggerService, clique com o botão direito em Dependências e escolha ‘Add Project Reference’, selecionando Contracts.
No projeto principal, faça o mesmo para adicionar referência, mas ao projeto LoggerService, que também está fazendo referência de tabela ao projeto Contracts.
NLOG
O nosso serviço de log terá quatro funções que registram mensagens dos tipos:
Mensagens Informativas
Mensagens de Aviso
Mensagens de Debug
Mensagens de Erro
Para isso iremos criar uma interface chamada ILoggerManager no projeto Contracts:
Precisamos agora instalar a biblioteca NLog em nosso projeto LoggerService, muito utilizada pela comunidade .net core.
No projeto LoggerService, clique com o botão direito em Dependências e escolha ‘Manage Nuget Packages’. Depois, basta pesquisar pelo nome da biblioteca pesquisada, NLog no caso.
Implementando a Interface
No projeto LoggerService iremos adicionar uma nova classe, a LoggerManager e implementaremos a interface ILoggerManager:
Como podemos ver, os nossos métodos apenas encapsulam os do NLog, e agora temos que definir todas as constantes (onde ficará o arquivo de log, nome gerado etc.) em um arquivo de texto no projeto principal e salvá-lo como nlog.config.
Precisamos agora configurar o serviço de log para seu uso, e a primeira etapa é atualizar o construtor da classe Startup:
Estamos usando a classe estática LogManager do NLog com o método LoadConfiguration para fornecer um caminho para o arquivo de configuração.
Agora temos que adicionar o serviço logger no contexto .NET e existem três maneiras para isso:
Ao chamar o método services.AddSingleton, podemos criar um serviço na primeira vez que o solicitamos e, em seguida, em cada a solicitação chamará a mesma instância do serviço.
Ao chamar o método services.AddScoped, significa que sempre que enviamos um HTTP pedido ao aplicativo, uma nova instância do serviço será criada.
Ao chamar o método services.AddTransient, significa que se vários componentes precisam do serviço, ele será criado novamente para cada solicitação destes.
Então, vamos adicionar um novo método na classe ServiceExtensions:
Depois precisamos modificar o método ConfigureServices para que inclua nosso método de extensão recém-criado:
Para usar um serviço de logger nesse caso, tudo o que precisamos fazer é injetar no construtor da classe que o utilizará e .NET Core resolverá esse serviço, através da injeção de dependência.
No Solution Explorer, vamos abrir a pasta Controllers e localize a classe WeatherForecastController. Vamos modificá-lo:
Como resultado teremos duas strings. Agora vá para a pasta que você especificou no arquivo nlog.config e verifique o resultado. Vocês deve ver duas pastas: a pasta internal_logs e a pasta de logs. Dentro da pasta de logs, você deve encontrar um arquivo com os seguintes logs:
Por fim concluímos a criação de logs em nossa aplicação. Até o próximo capítulo !