Logs no ASP.NET com Serilog
03/03/2022
André Baltieri

Neste artigo vamos aprender como podemos utilizar o pacote Serilog para logar informações das nossas aplicações.

O que é o Serilog?

O Serilog é uma biblioteca para log de informações de qualquer aplicação .NET, que trabalha com Sinks como base.

O Serilog em sí, é uma estrutura que nos permite salvar quaisquer tipos de informação, de forma organizada, durante a execução da aplicação.

Sinks

Quando trabalhamos com logs, os gostos e necessidades variam muito. Cada empresa ou time, opta por concentrar seus logs em um local diferente e o Serilog auxilia nisso.

O que acontece é que o Serilog possui apenas a implementação básica dos logs e os Sinks fazem todo o trabalho sujo aqui.

Desta forma, caso queira que o Serilog escreva seus logs em um arquivo, basta utilizar o Sink.File. O mesmo acontece para E-mails com Sink.Email e até para o Discord com Sink.Discord.

Você também pode criar seu próprio Sink caso queira armazenar os logs em algum local específico da sua empresa cujo os Sinks padrões não te atenda.

Setup

O primeiro passo para utilizar o Serilog é fazer a instalação do seu pacote principal, cujo todos os Sinks derivarão. Isto pode ser feito executando o comando abaixo.

dotnet add package Serilog.AspNetCore

Para finalizar, precisamos adicionar o UseSerilog no Host da aplicação, conforme mostrado abaixo.

builder.Host.UseSerilog(...);

É importante notar, que neste caso deixamos as configurações vazias por enquanto (...), o que causará um erro se tentarmos executar o programa.

Posteriormente veremos como configurar os Sinks da maneira correta, para diferentes tipos de log.

Log no Console

A primeira forma e mais simples de termos quaisquer informações durante a execução das nossas aplicações é visualizar o Console (Terminal onde a aplicação está sendo executada).

Para logar as informações no Console utilizando Serilog, precisamos primeiro configurar o método WriteTo, apontando para Console.

builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console(LogEventLevel.Debug)

Note que neste exemplo utilizamos o LogEventLevel.Debug o que significa que apenas mensagens de Debug serão logadas no Console.

Neste ponto, todas as mensagens de Debug, incluindo as do próprio .NET, serão logadas. O mesmo vale para Warnings e Errors, é só mudar o LogEventLevel para tê-las logadas.

Mensagens customizadas

Caso queira disparar alguma mensagem customizada durante a execução da aplicação, podemos utilizar o Log do namespace Serilog, informando o tipo da mensagem e texto que desejamos logar.

using Serilog;

Log.Error("Mensagem de erro");
Log.Information("Mensagem de informação");
Log.Fatal("Erro fatal");
Log.Debug("Mensagem de Debug");
Log.Warning("Mensagem de Warning");

Log no E-mail

Seguindo a mesma linha de raciocínio anterior, podemos ter as mensagens logadas via E-mail. Neste caso temos que ter um cuidado especial para não encher a caixa de E-mails de mensagens.

O Serilog possui um Sink que faz este trabalho, e podemos instalá-lo através do pacote como demonstrado abaixo.

dotnet add package Serilog.Sinks.Email

Feito isto, tudo que precisamos fazer é configurar o Sink no Program.cs como fizemos anteriormente com o Console.

builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console(LogEventLevel.Debug)
    .WriteTo.Email(new EmailConnectionInfo
    {
        Port = 587,
        EmailSubject = "TESTE",
        EnableSsl = true,
        FromEmail = "hello@balta.io",
        MailServer = "smtp.sendgrid.net",
        NetworkCredentials = new NetworkCredential("apikey", "pwd"),
        ToEmail = "hello@balta.io",
        IsBodyHtml = true
    }));

Log no arquivo

Por fim temos o Serilog.Sinks.File que nos permite logar mensagens em um arquivo (Texto neste caso). Este método particularmente é um dos que mais utilizo.

builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console(LogEventLevel.Debug)
    .WriteTo.File("log.txt",
        LogEventLevel.Warning,
        rollingInterval: RollingInterval.Day));

Outros Sinks

Algo que gosto no Serilog é o ótimo suporte por parte da comunidade. É quase impossível precisar de um Sink que ainda não existe, confira a lista completa aqui.

Aqui no balta por exemplo, utilizamos o Sink do Discord, já que temos nossas informações todas concentradas lá. É muito legal conseguir ver o que está acontecendo no site e ainda poder agir de forma pro-ativa.

Conclusão

Escrever logs de forma simples e fácil, com extesões e suporte para múltiplos formatos e plataformas no .NET é com o Serilog. Ele é um dos meus pacotes preferidos!

Conheça o autor

André Baltieri

Microsoft MVP

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.

An unhandled error has occurred. Reload 🗙