sábado, 30 de janeiro de 2016

Utilizando o NLog

É um vídeo muito mais simples que o citado no post do log4net, mostrando muito menos detalhes, mas já dá para ver que é muito rápido começar a utilizar o NLog.

Há muita documentação no wiki do pacote oficial do GitHub.

1 - Instalar na aplicação o pacote nuget, que pode ser feito via comando no Package Manager Console:

Install-Package NLog

Para ser um acelerador, aconselho instalar a configuração na aplicação:
Install-Package NLog.Config

Há diversos instaladores específicos para facilitar ainda mais o uso, dependendo do projeto que for necessário:
  • NLog.Web - pacote contem targets e layout-renderes específicos para o ASP.Net and IIS.
  • NLog.Windows.Forms - pacote contem targets específicos Windows.Forms
  • NLog.Extended - MSMQ target, AppSetting layout renderer
  • NLog.Config - Configuração NLog exemplo/inicial
  • NLog.Schema - XSD Schema para o NLog config xml - para, entre outras coisas, ter o Intellisense no Visual Studio

2 - Configurar NLog.config

Aqui o NLog fica muito mais simples, já que o intellisense do Visual Studio ajuda em toda a configuração do arquivo.

O nível (level) do NLog possibilita as essas opções:
  • Trace - log muito detalhado, o que pode incluir alto volume de informação (como payload do protocolo). Este nível de log é tipicamente habilitado somente durante o desenvolvimento.
  • Debug - informação de depuração, menos detalhada que o trace, tipicamente não habilitado em produção.
  • Info - mensagens de informação, que normalmente são habilitado no ambiente de produção
  • Warn - mensagens de avisos, tipicamente para assuntos não críticos, que podem ser recuperadas ou falhas temporárias
  • Error - mensagens de erros - na maioria das vezes estas são exceções
  • Fatal - erros muito sérios
O que é o appender do log4net no NLog é o Targets (https://github.com/nlog/nlog/wiki/Targets)
Há também vários layouts disponívels (https://github.com/nlog/nlog/wiki/Layouts)
E é possível configurá-los com várias opções (https://github.com/NLog/NLog/wiki/Layout-renderers)

O resultado é uma configuração extremamente simples:
<?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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" >
<targets>
<target name="logfile" xsi:type="File" fileName="mylogfile.txt" />
<target name="console" xsi:type="Console" />
<target name="debugger" xsi:type="Debugger" />
<target name="trace" xsi:type="Trace" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="console" />
<logger name="*" minlevel="Debug" writeTo="debugger" />
<logger name="*" minlevel="Trace" writeTo="trace" />
</rules>
</nlog>
view raw app.config.xml hosted with ❤ by GitHub

 Também é fácil fazer a configuração do log através de programação, como nesta resposta do Stack Overflow "Add, enable and disable NLog loggers programmatically".

3 Definir a instância da classe

Há um método para facilitar a configuração da instância na classe:
private static Logger logger = LogManager.GetCurrentClassLogger();
view raw cs hosted with ❤ by GitHub

4 Efetuar log

logger.Trace("");
logger.Debug("");
logger.Info("");
logger.Warn("");
logger.Error("");
logger.Fatal("");

logger.Log(LogLevel.Info, "");

O código fonte do exemplo está disponível no GitHub.