Serilog em .NET: Rastreamento Estruturado e Logs Detetivesco

Imagine que você é um detetive, mas ao invés de investigar pistas em um crime, você investiga comportamentos estranhos no seu código. É exatamente para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! isso que serve o logging🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade.: coletar evidências que ajudem a entender o que está acontecendo em cada parte da aplicação. E quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o assunto é registrar logs em .NET, o Serilog é uma das ferramentas mais populares e poderosas. Ele oferece flexibilidade para escrever logs em diferentes formatos e lugares (chamados de Sinks), além de permitir que você personalize desde os detalhes mais simples até estruturas de logs complexas. Se você quer rastrear cada evento que ocorre no seu sistema e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. se tornar um verdadeiro detetive de bugs, este artigo é pra você!

📌 Tabela de Conteúdo🔗

🔍 Por que Serilog?🔗

Enquanto🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! o logging tradicional é como escrever diários em papel, o Serilog é um banco de dados estruturado disfarçado de sistema de logs. Principais vantagens:

// Log tradicional (fracasso investigativo)
Console.WriteLine($"Erro ao processar pedido {pedidoId}");
// Log com Serilog (sucesso detetivesco)
Log.Error("Erro ao processar pedido {PedidoId} | Usuário: {Usuario}", pedidoId, usuario);

🛠️ Configuração Básica em 5 Minutos🔗

Para começar, você precisa adicionar📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. o pacote Serilog ao seu projeto. Supondo que você esteja usando o Visual Studio🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!Prepare seu ambiente de desenvolvimento com o Visual Studio em uma aventura C#. Este tutorial prático ensina a instalar, configurar e personalizar sua IDE. ou algum outro IDE, basta abrir o terminal do NuGet📦 Crie um Pacote NuGet: Compartilhe seu Código!📦 Crie um Pacote NuGet: Compartilhe seu Código!Aprenda a empacotar, configurar e publicar pacotes NuGet em C# passo a passo, com dicas profissionais e práticas recomendadas para seu projeto. e executar🔍 Comandos: Desacople Ações dos Botões!🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção.:

Install-Package Serilog
Install-Package Serilog.Sinks.Console

O primeiro comando🔍 Comandos: Desacople Ações dos Botões!🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. instala o core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. do Serilog, enquanto🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! o segundo adiciona um Sink para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! escrever logs no Console. Existem vários outros Sinks (para arquivos, bancos de dados, etc.), mas vamos ficar com o Console por enquanto🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais!.

Depois de instalar o Serilog, é hora de inicializar o logger. Geralmente, você faz isso no ponto de entrada do seu aplicativo (por exemplo, no Program.cs). Um setup mínimo🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. poderia ser:

using Serilog;
public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.Console()  // Envia logs para o console
            .CreateLogger();
        Log.Information("Aplicação iniciada!");
        // ...
    }
}

Aqui, estamos criando uma configuração🚀 Scale Out com Redis: Atenda Milhões de Conexões!🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real. de logger que escreve logs no console. Depois, chamamos Log.Information(...) para enviar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. a primeira mensagem. Pronto, você já tem algo registrado!

📝 Logging Estruturado: Seus Logs Não Serão Mais Mistérios Indecifráveis🔗

O Serilog trabalha com o conceito de mensagens formatadas e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. campos estruturados. Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. você faz:

Log.Information("O usuário {Nome} se conectou ao sistema", nomeDoUsuario);

Além de exibir a mensagem, o Serilog armazena a informação de que Nome = nomeDoUsuario, facilitando pesquisas em sistemas de analytics, por exemplo. Esse estilo de structured logging🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. é muito útil para filtrar e agrupar🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. eventos posteriormente.

No arquivo de log (JSON formatado):

{
  "Timestamp": "2024-02-15T10:00:00Z",
  "Level": "Information",
  "Message": "Sherlock realizou compra de 99.99 no pedido 1234",
  "Properties": {
    "Usuario": "Sherlock",
    "Valor": 99.99,
    "PedidoId": 1234
  }
}

⚙️ Configuração Avançada: appsettings.json vs Código🔗

Opção 1: Via Código (rápido)

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day)
    .Enrich.WithMachineName()
    .Enrich.WithThreadId()
    .CreateLogger();

Opção 2: Via appsettings.json (ideal para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! ambientes)

{
  "Serilog": {
    "Using": ["Serilog.Sinks.Console", "Serilog.Sinks.File"],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": { "path": "logs/log-.txt", "rollingInterval": "Day" }
      }
    ],
    "Enrich": ["WithMachineName", "WithThreadId"]
  }
}

🎩 Enriquecimento de Logs: Adicione DNA aos Seus Registros🔗

Adicione informações automáticas como:

Log.Logger = new LoggerConfiguration()
    .Enrich.WithProperty("Aplicacao", "SistemaAntiFraude")
    .Enrich.WithEnvironmentUserName()
    .Enrich.WithAssemblyName()
    .Enrich.WithCorrelationId()
    .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message} {Properties}{NewLine}{Exception}")
    .CreateLogger();

Resultado:

[14:30:45 INF] Usuário autenticado { Aplicacao: "SistemaAntiFraude", EnvironmentUserName: "Watson", AssemblyName: "DetetiveApp", CorrelationId: "abcd1234" }

📤 Sinks: Despejando Logs em Vários Lugares🔗

Um dos pontos fortes do Serilog é a variedade de lugares (ou Sinks) para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! onde você pode mandar seus logs:

A instalação segue sempre a mesma ideia: Install-Package Serilog.Sinks.<AlgumaCoisa>, depois configura no LoggerConfiguration():

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("logs.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();

Pronto, agora seus logs vão para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! o console e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! um arquivo diário.

🕵️ Padrões de Detetive: Melhores Práticas para Logging Eficiente🔗

1. Mantenha o log estruturado: use parâmetros🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. nomeados ({Nome}) em vez de concatenar strings📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance..

2. Não exagere em logs de nível muito detalhado: níveis Verbose e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Debug podem encher o disco se forem usados sem critérios.

3. Evite informações sensíveis🗝️ Azure Key Vault: Gerencie Segredos como um Especialista!🗝️ Azure Key Vault: Gerencie Segredos como um Especialista!Aprenda a proteger e gerenciar segredos, chaves e certificados com o Azure Key Vault em aplicações .NET, seguindo as melhores práticas de segurança na nuvem.: não registre senhas, tokens ou dados críticos.

4. Filtre o que vai para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! cada Sink: se você quer logs mais completos em arquivo, mas resumidos no console, basta configurar níveis mínimos diferentes para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! cada destino.

5. Use correlação de logs: em sistemas distribuídos, inclua IDs de transação para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! rastrear por onde a requisição passou.

🔬 Caso Real: Implementando em um Microserviço🔗

Cenário: API de pagamentos com ASP.NET Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.

public class PagamentoController : ControllerBase
{
    private readonly ILogger<PagamentoController> _logger;
    public PagamentoController(ILogger<PagamentoController> logger)
    {
        _logger = logger;
    }
    [HttpPost]
    public IActionResult Processar([FromBody] PagamentoRequest request)
    {
        using (_logger.BeginScope("Transação {TransacaoId}", request.Id))
        {
            _logger.LogInformation("Iniciando processamento para {Usuario}", request.UsuarioId);
            try {
                // Lógica de pagamento
                _logger.LogDebug("Validando cartão {Ultimos4Digitos}", request.CartaoCredito[^4..]);
                if (saldoInsuficiente)
                    _logger.LogWarning("Saldo insuficiente: {Usuario} | Valor: {Valor}", request.UsuarioId, request.Valor);
                return Ok();
            }
            catch (Exception ex) {
                _logger.LogError(ex, "Falha catastrófica no processamento");
                return StatusCode(500);
            }
        }
    }
}

Desafio Prático:

Crie um middleware🔒 Middleware: Intercepte Requests como um Vigilante!🔒 Middleware: Intercepte Requests como um Vigilante!Descubra como usar middlewares no ASP.NET Core para monitorar, validar e controlar o fluxo de requisições de forma segura e eficiente em seu projeto. que registre:

  • Duração da requisição
  • Status code
  • User agent
  • IP do cliente

Use enriquecimento para adicionar automaticamente Correlation ID📝 Logging Distribuído: Centralize Rastreamento de Microservices!📝 Logging Distribuído: Centralize Rastreamento de Microservices!Aprenda a centralizar logs distribuídos em microservices com .NET8, Serilog e ELK, correlacionando requisições e agilizando a resolução de problemas.!

👉 Dica: Explore Serilog.Enrichers.AspNetCore

Com isso, você está preparado para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! usar o Serilog e transformar-se em um legítimo detetive de bugs, registrando cada passo do seu sistema. A investigação nunca mais será a mesma!

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados