Registro para C# (.NET): visão geral das melhores soluções
O registro é um aspecto crítico no desenvolvimento de qualquer aplicação séria em C#. Ele permite monitorar o estado do sistema, diagnosticar erros, analisar o comportamento dos usuários e coletar métricas de desempenho. No ecossistema .NET, existem várias bibliotecas maduras para registro, cada uma com seus pontos fortes. Neste artigo, veremos as três soluções mais populares: Serilog, NLog e log4net, além da abstração padrão Microsoft.Extensions.Logging.
Por que uma biblioteca separada para registro?
A classe embutida System.Diagnostics.Debug ou Console.WriteLine é adequada apenas para cenários muito simples. Bibliotecas profissionais oferecem:
- Níveis de registro (Trace, Debug, Information, Warning, Error, Fatal) — filtragem flexível de mensagens.
- Registro estruturado — salvamento de dados em formato JSON com possibilidade de análise posterior.
- Múltiplos "destinos" (sinks/targets) — gravação em arquivo, banco de dados, console, ELK stack, Sentry, Application Insights, etc.
- Configuração dinâmica — alteração do nível de registro sem reiniciar a aplicação.
- Desempenho — gravação assíncrona, buffer, impacto mínimo na velocidade de execução.
1. Serilog — o padrão moderno
Serilog é a biblioteca mais popular para .NET, que apostou no registro estruturado. Em vez de formatar strings com string.Format, você usa placeholders nomeados:
using Serilog;
Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/app-.log", rollingInterval: RollingInterval.Day) .WriteTo.ApplicationInsights(TelemetryConfiguration.Active, TelemetryConverter.Traces) .CreateLogger();
// Exemplo de registro estruturadoLog.Information("Usuário {UserId} executou pedido {OrderId} no valor de {Total:C}", userId, orderId, total);Serilog é ideal para microsserviços, aplicações em nuvem e projetos onde a análise profunda de logs via Kibana ou Grafana é importante.
2. NLog — flexibilidade e desempenho
NLog é uma biblioteca poderosa com ricos recursos de roteamento. Ela suporta tanto configuração XML quanto programática. Uma característica do NLog é o mecanismo interno de gravação assíncrona e suporte a regras condicionais.
using NLog;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public void ProcessOrder(Order order){ Logger.Info("Início do processamento do pedido {OrderId}", order.Id); try { // lógica de negócio Logger.Debug("Pedido {OrderId} processado com sucesso", order.Id); } catch (Exception ex) { Logger.Error(ex, "Erro ao processar pedido {OrderId}", order.Id); throw; }}NLog é frequentemente escolhido para aplicações desktop (WPF, WinForms) e projetos legados devido à facilidade de migração do log4net.
3. log4net — o veterano testado
log4net é uma adaptação da popular biblioteca Java log4j. É a solução mais antiga, ainda amplamente utilizada em projetos corporativos. A principal vantagem é a enorme quantidade de adaptadores e "appenders" escritos ao longo de décadas.
// Configuração via XML (log4net.config)<log4net> <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> <file value="logs/app.log" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd" /> Também na biblioteca
Container de Injeção de Dependência para Java: Spring IoC, Google Guice e Dagger
Geração de QR Codes em Java: biblioteca ZXing (guia detalhado)
Geração de relatórios PDF em Java com iText e Apache PDFBox