Introdução: Por que o registro (logging) é importante?
\n\nImagine que sua aplicação em C# está em produção. De repente, os usuários relatam um erro, mas você não consegue entender o que deu errado. Sem logs, você é como um piloto sem instrumentos. O registro (logging) é o processo de gravar informações sobre o funcionamento da aplicação: erros, avisos, mensagens de depuração e eventos importantes.
\n\nNeste artigo, abordaremos as melhores práticas de registro para desenvolvedores iniciantes em C# (.NET). Você aprenderá como configurar o registro, quais ferramentas usar e como evitar erros comuns.
\n\n1. Escolha da ferramenta de registro em C#
\n\nNo ecossistema .NET, existem várias bibliotecas populares para registro. Para iniciantes, recomendamos três opções principais:
\n\n1.1. ILogger integrado (Microsoft.Extensions.Logging)
\n\nA partir do .NET Core, a Microsoft fornece a interface integrada ILogger. Ela é simples de usar e não requer a instalação de bibliotecas de terceiros.
using Microsoft.Extensions.Logging;\n\npublic class OrderService\n{\n private readonly ILogger<OrderService> _logger;\n\n public OrderService(ILogger<OrderService> logger)\n {\n _logger = logger;\n }\n\n public void ProcessOrder(int orderId)\n {\n _logger.LogInformation("Processando pedido {OrderId}", orderId);\n // Lógica de processamento\n }\n}\n\n1.2. Serilog — flexível e poderoso
\n\nSerilog é uma das bibliotecas mais populares. Ele suporta registro estruturado, o que facilita a análise de dados. Instalação via NuGet: Install-Package Serilog.AspNetCore
using Serilog;\n\npublic class Program\n{\n public static void Main(string[] args)\n {\n Log.Logger = new LoggerConfiguration()\n .MinimumLevel.Debug()\n .WriteTo.Console()\n .WriteTo.File("logs/app.log", rollingInterval: RollingInterval.Day)\n .CreateLogger();\n\n try\n {\n Log.Information("Aplicação iniciada");\n CreateHostBuilder(args).Build().Run();\n }\n catch (Exception ex)\n {\n Log.Fatal(ex, "Aplicação encerrada com erro");\n }\n finally\n {\n Log.CloseAndFlush();\n }\n }\n}\n\n1.3. NLog — escolha clássica
\n\nNLog é outra biblioteca madura com amplas possibilidades de configuração através de arquivos de configuração.
\n\n// Configuração via appsettings.json\n{\n "NLog": {\n "targets": {\n "console": {\n "type": "Console",\n "layout": "${longdate}|${level:uppercase=true}|${message}"\n },\n "file": {\n "type": "File",\n "fileName": "logs/app.log",\n "layout": "${longdate}|${level:uppercase=true}|${message}"\n }\n },\n "rules": [\n { "logger": "*", "minLevel": "Info", "writeTo": "console,file" }\n ]\n }\n}\n\n2. Níveis de registro: quando usar cada um
\n\nO uso correto dos níveis de registro é a base de uma boa prática. Em C# (.NET), os seguintes níveis são definidos (do mais crítico ao menos crítico):
\n\n- \n
- Trace (0) — informações de depuração extremamente detalhadas. Usado apenas para diagnóstico profundo. \n
- Debug (1) — mensagens de depuração para desenvolvedores. Ativado no ambiente de desenvolvimento, mas desativado em produção. \n
- Information (2) — mensagens informativas gerais sobre o funcionamento da aplicação (inicialização, operações bem-sucedidas). \n
- Warning (3) — avisos sobre problemas potenciais que não são erros (por exemplo, tempo de execução excedido). \n
- Error (4) — erros que exigem atenção, mas não são fatais para a aplicação. \n
- Critical (5) — erros críticos, após os quais a aplicação