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 logsTécnicas de Logging e Monitoramento de Consultas em Tempo RealTécnicas de Logging e Monitoramento de Consultas em Tempo RealNeste tutorial, aprenda a registrar e monitorar consultas LINQ em C# para identificar gargalos, otimizar desempenho e manter a estabilidade do sistema. complexas. Se você quer rastrear cada evento que ocorre no seu sistema e 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 logsTécnicas de Logging e Monitoramento de Consultas em Tempo RealTécnicas de Logging e Monitoramento de Consultas em Tempo RealNeste tutorial, aprenda a registrar e monitorar consultas LINQ em C# para identificar gargalos, otimizar desempenho e manter a estabilidade do sistema.. 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çãoGerenciando Secrets e Configs em Docker SwarmGerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. de logger que escreve logs no console. Depois, chamamos LogTécnicas de Logging e Monitoramento de Consultas em Tempo RealTécnicas de Logging e Monitoramento de Consultas em Tempo RealNeste tutorial, aprenda a registrar e monitorar consultas LINQ em C# para identificar gargalos, otimizar desempenho e manter a estabilidade do sistema..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 logTécnicas de Logging e Monitoramento de Consultas em Tempo RealTécnicas de Logging e Monitoramento de Consultas em Tempo RealNeste tutorial, aprenda a registrar e monitorar consultas LINQ em C# para identificar gargalos, otimizar desempenho e manter a estabilidade do sistema. (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 logTécnicas de Logging e Monitoramento de Consultas em Tempo RealTécnicas de Logging e Monitoramento de Consultas em Tempo RealNeste tutorial, aprenda a registrar e monitorar consultas LINQ em C# para identificar gargalos, otimizar desempenho e manter a estabilidade do sistema. 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 logsTécnicas de Logging e Monitoramento de Consultas em Tempo RealTécnicas de Logging e Monitoramento de Consultas em Tempo RealNeste tutorial, aprenda a registrar e monitorar consultas LINQ em C# para identificar gargalos, otimizar desempenho e manter a estabilidade do sistema. 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 logsTécnicas de Logging e Monitoramento de Consultas em Tempo RealTécnicas de Logging e Monitoramento de Consultas em Tempo RealNeste tutorial, aprenda a registrar e monitorar consultas LINQ em C# para identificar gargalos, otimizar desempenho e manter a estabilidade do sistema.: 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 IDGerenciando Exceções Distribuídas: Usando Logging e ObservabilityGerenciando Exceções Distribuídas: Usando Logging e ObservabilityAprenda a gerenciar exceções em ambientes distribuídos utilizando logging estruturado, correlação de IDs e tracing para diagnósticos mais rápidos.!

👉 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