Registrar logs de forma eficiente é fundamental para monitorar e solucionar problemas em aplicações. O Serilog é uma biblioteca popular no ecossistema .NET, conhecida por sua flexibilidade e suporte a logs estruturados. Com ele, é fácil enriquecer mensagens com contexto adicional e direcionar logs para diversos destinos, como arquivos, console ou sistemas externos. Neste artigo veremos como configurar e usar o Serilog para tornar o registro de logs mais detalhado e simples em seus projetos .NET.
Por que utilizá-lo?
O termo “logs estruturados” refere-se a logs que possuem um formato consistente e detalhado, permitindo análises mais ricas e filtragem avançada. Ao contrário de logs tradicionais em texto simples, logs estruturados são especialmente úteis para monitoramento de aplicações e diagnóstico de problemas, porque permitem enriquecer cada mensagem com propriedades e contexto adicionais. O Serilog é amplamente utilizado devido à sua facilidade de configuração, flexibilidade e ampla gama de sinks para destinos de logs (como arquivos, bancos de dados e serviços externos como Seq).
Configurando o Serilog
Para compreender melhor o funcionamento do Serilog, vamos criar uma aplicação ASP.NET Core simples e integrá-lo para gerenciar o registro de logs. A ideia é configurar o Serilog para registrar primeiramente logs no console e em um arquivo e por fim configurá-lo para registrar logs no banco de dados.
Em sua aplicação ASP.NET Core instale os seguintes pacotes via .NET CLI ou NuGet :
Serilog: A biblioteca principal para registro de logs.
dotnet add package Serilog
Install-Package Serilog
Serilog.AspNetCore: Permite integrar o Serilog ao pipeline de logs do ASP.NET Core.
dotnet add package Serilog.AspNetCore
Install-Package Serilog.AspNetCore
Serilog.Sinks.Console: Para exibir logs no console.
dotnet add package Serilog.Sinks.Console
Install-Package Serilog.Sinks.Console
Serilog.Sinks.File: Para salvar logs em arquivos.
dotnet add package Serilog.Sinks.File
Install-Package Serilog.Sinks.File
Esses pacotes são suficientes para iniciarmos. Conforme a necessidade, você pode adicionar outros sinks específicos, como bancos de dados, que abordaremos adiante.
Com os pacotes instalados, vamos configurar o Serilog para capturar e registrar logs no console e em um arquivo. Abra o arquivo “Program.cs” e configure o Serilog como o gerenciador de logs da aplicação:
using Serilog;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("logs/actions_log.txt", rollingInterval: RollingInterval.Day)
.Enrich.FromLogContext()
.CreateLogger();
builder.Host.UseSerilog();
var app = builder.Build();
Podemos também adicionar informações adicionais ao log, como propriedades de contexto (ex: informações sobre a requisição HTTP em uma API) utilizando o “.Enrich.FromLogContext()”. Ele permite enriquecer os logs com dados que podem ser importantes para depuração ou rastreamento, como o ID da requisição ou o nome do usuário.
Por fim, o “.CreateLogger()” finaliza a configuração e cria o logger com as opções definidas até esse ponto. Agora, a aplicação pode começar a gerar logs usando o Serilog.
Agora devemos integrar o Serilog ao ciclo de vida do host da aplicação utilizando o “builder.Host.UseSerilog();” que vai permitir que o Serilog seja utilizado para registrar logs durante a execução da aplicação, inclusive capturando logs automaticamente de outras bibliotecas que a aplicação possa utilizar (como ASP.NET Core, por exemplo). Isso substitui o logger padrão do .NET pelo Serilog.
Agora, ao executar o projeto, os logs aparecerão no console e serão salvos no arquivo logs/actions_log.txt.
Tela do console
Arquivo TXT
Alterando o formato dos logs
Na configuração acima, alteramos o formato da data e hora que segue o padrão ano, mês, dia para dia, mês, ano que é utilizado aqui no Brasil.
Usando o sink do Serilog para SQL Server
Registrar logs em um banco de dados pode ser útil para aplicações que necessitam de persistência de logs a longo prazo, análise avançada ou integração com outras ferramentas de monitoramento. O Serilog permite que você envie logs diretamente para um banco de dados, como o SQL Server, de forma simples e eficiente.
Para começar vamos adicionar o pacote “Serilog.Sinks.MSSqlServer”:
Install-Package Serilog.Sinks.MSSqlServer
ou
dotnet add package Serilog.Sinks.MSSqlServer
Agora, vamos configurar o Serilog para gravar os logs em uma tabela do SQL Server.
var builder = WebApplication.CreateBuilder(args);
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.MSSqlServer(
connectionString: "SuaConnectionString",
tableName: "Logs",
autoCreateSqlTable: true
)
.Enrich.FromLogContext()
.CreateLogger();
builder.Host.UseSerilog();
var app = builder.Build();
Registrando mensagens com diferentes níveis de Log
Com o Serilog configurado, você pode registrar mensagens com diversos níveis de log diretamente no código.
public class MinhaClasse
{
private readonly ILogger _logger;
public MinhaClasse(ILogger logger)
{
_logger = logger;
}
public void MeuMetodo()
{
//Detalhes para desenvolvedores
Log.Debug("Mensagem de depuração.");
//Informações gerais
Log.Information("A aplicação iniciou com sucesso."); //
//Alerta
Log.Warning("O uso de memória está acima do esperado."); //
//Erro
Log.Error("Falha ao conectar ao banco de dados.");
//Erros fatais
Log.Fatal("Erro crítico! O sistema será finalizado.");
}
}
Esses logs são muito úteis para monitorar o comportamento da aplicação e identificar problemas em diferentes ambientes.
Conclusão
Com o Serilog, você tem várias opções para personalizar o registro de logs e adaptá-lo às necessidades específicas da sua aplicação. A configuração do nível de log, o formato das mensagens e os destinos dos logs (como arquivos, console ou banco de dados) podem ser ajustados conforme o seu caso. Com o tempo, você aprenderá a utilizar diferentes Sinks e recursos do Serilog para otimizar o monitoramento e a depuração da sua aplicação. Para mais detalhes, consulte a documentação oficial do Serilog e explore as opções de Sinks e extensões que atendem melhor às suas necessidades.
Acelere a sua carreira conosco!
Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET Start: Clique aquiSe é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET Expert: Clique aqui