ASP
.NET Core - Fazendo o Logging com o NLog
![]() |
Hoje veremos como fazer a integração do NLog com uma aplicação ASP .NET .Core MVC. |
Em aplicativos do mundo real, um mecanismo de registro de erros adequado é essencial para rastrear e solucionar o comportamento inesperado da aplicação.
Na Asp.Net Core,
temos uma API de Log embutida que está incluída no namespace
Microsoft.Extensions.Logging e que eu já mostrei
como usar em outros artigos.
Com esta API, podemos registrar informações em diferentes provedores de registro
integrados, como Console, Debug, EventListener,
TraceListeners etc. Para estender o número de provedores, a Microsoft
também colaborou com vários provedores de registro de terceiros, como
NLog, Serilog, Loggr, Log4Net e alguns outras.
Neste artigo, vamos explorar a integração da Asp.Net Core
com o NLog, um dos mais populares provedores
de registro de log de terceiros. Veja a página do projeto NLog aqui:
NLog
Vamos criar uma aplicação ASP .NET Core MVC padrão usando o VS 2019 Community na versão do .NET Core 3.1 e mostrar como integrar o NLog para fazer o registro de log em arquivos texto.
Para isso vamos usar o pacote NLog.Web.AspNetCore via Nuget e realizar a configuração e a integração deste provedor com o logging na ASP.NET Core.
Criando o projeto inicial no VS 2019
Abra o VS 2019 Community e crie um novo projeto via menu File-> New Project;
Selecione o template ASP .NET Core Web Application, e, Informe o nome da solução Aspnc_NLog e o nome do projeto FuncionariosWeb.
A seguir selecione .NET Core e ASP .NET Core 3.1 e marque o template Web Application e as configurações conforme figura abaixo:
Observe que não vamos definir agora a autenticação em nosso projeto vamos fazer isso depois.
Depois que o projeto foi criado, precisamos adicionar a referência ao pacote:
Nota: Para instalar use o comando Install-Package <nome> -version 4.9.3
Pronto com isso já podemos integrar o NLog ao nosso projeto.
Criando o arquivo de configuração NLog
Vamos criar um arquivo texto na raiz do projeto com o nome de nlog.config :
A seguir vamos definir algumas configurações que serão usadas em nosso projeto para realizar o logging.
Inclua no arquivo nlog.config o código abaixo:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- the targets to write -->
<targets>
<!-- write to file -->
<target name="macnetlog" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} - ${message} - ${exception:format=StackTrace}${newline}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!-- all logs including Microsoft -->
<logger name="*" minlevel="Trace" writeTo="macnetlog" />
</rules>
</nlog>
|
A configuração do NLog é formatada como XML e é incorporada a um arquivo de configuração de projeto do Visual Studio (app.config ou web.config) ou é um arquivo XML autônomo.
Aqui destacamos as seções:
<targets> - Onde definimos o nome e caminho do arquivo de log e formatamos como a mensagem será gravada
<rules> - Onde definimos as regras para o logging
Para mais detalhes de configuração consulte a documentação no Github.
Lembrando que no momento do build, este arquivo de configuração deve ser copiado para o diretório de saída. Para fazer isso, clique com o botão direito sobre o arquivo nlog.config e na janela Propriedades, na seção “Advanced”, vá para a propriedade e define o valor de Copy to Output Directory como : copy if newer.
Adicionando o provedor NLog
Para adicionar NLog como um dos provedores de log, precisamos modificar o método CreateHostBuilder no arquivo Program.cs. O código abaixo mostra como habilitar o provedor de registro NLog:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
namespace MacorattiNet.Web
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddNLog(hostingContext.Configuration.GetSection("Logging"));
});
});
}
}
|
Observe que os
níveis de registro serão aplicados com base na configuração de registro
fornecida no arquivo appsettings.json.
Abaixo está a configuração de log padrão que o Visual Studio cria no arquivo
appsettings.json ao criar um novo projeto. Você
pode alterar os níveis de registro de acordo com sua necessidade.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
|
Se você precisa
usar uma configuração avançada de nível de registro, visite a página
oficial da Microsoft.
Com isso, concluímos a integração do NLog com nossa aplicação. Vamos testar o provedor de log NLog lançando uma exceção.
Testando o provedor NLog
Para testar o provedor NLog, estamos usando a API do Microsoft Logging que ja está incluída no pacote Microsoft.Extensions.Logging, que já foi adicionado ao modelo da aplicação Asp.Net Core.
Vamos usar o controlador HomeController onde já estamos usando a interface ILogger para registrar os erros e definir o código abaixo onde no método Action Privacy definimos um código que vai causar uma exceção:
using Aspnc_NLog.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Diagnostics;
namespace Aspnc_NLog.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Privacy()
{
try
{
int numero = 100;
var resultado = numero / Convert.ToInt32("0");
}
catch (Exception ex)
{
_logger.LogInformation($"Testando o NLog em {DateTime.UtcNow}");
_logger.LogWarning("NLog - Alerta");
_logger.Log(LogLevel.Error, ex, ex.Message);
}
return View();
}
public IActionResult Index(){...}
...
}
}
|
Nota: A interface ILogger já está disponível no contêiner de dependência do aplicativo porque o construtor WebHost está adicionando o serviço Logging ao contêiner de dependência junto com outros serviços necessários.
Aqui estamos gravando o registro de erro definindo uma informação e um alerta, e, o erro que serão gravados no arquivo de log gerado dentro da pasta logs na pasta bin/debug/netcoreapp3.1 do projeto:
Executando o projeto, clicando no link Privacy e a seguir abrindo a pasta:
D:\_aspncore\_aspnc_10\Aspnc_NLog\Aspnc_NLog\bin\Debug\netcoreapp3.1\logs
que é a localização no meu projeto, veremos o arquivo texto 2020-11-08.text gerado conforme abaixo:
Abrindo o arquivo texto teremos o log gerado:
Vimos assim como é simples usar o NLog e integrá-lo com a ASP .NET Core MVC.
Pegue o projeto
aqui:
Aspnc_NLog.zip (sem as
referências)
(Disse Jesus)"Eu sou a videira
verdadeira, e meu Pai é o lavrador. Toda a vara em mim, que não dá fruto, a
tira; e limpa toda aquela que dá fruto, para que dê mais fruto."
João 15:1,2
Referências:
ASP .NET Core - Acessando dados com Entity ... -
ASP.NET Core Web API - Tratamento de erros -
ASP .NET Core MVC - Tratamento de exceções - II -
ASP .NET Core - CRUD usando Blazor e Entity ... -
ASP .NET Core Blazor - Macoratti.net
Blazor - Vale a pena usar o Blazor -
ASP .NET Core 2 - MiniCurso Básico -
ASP .NET Core - Implementando a segurança ... -
Curso ASP .NET Core - Macoratti.net
ASP .NET Core - Implementando a segurança com .
ASP.NET Core MVC - Criando um Dashboard .