Registo e rastreio do .NET
O código pode ser instrumentado para produzir um log, que serve como um registro de eventos interessantes que ocorreram enquanto o programa estava em execução. Para entender o comportamento do aplicativo, os logs podem ser revisados. O .NET acumulou várias APIs de log diferentes ao longo de seu histórico e este artigo ajudará você a entender quais opções estão disponíveis.
Nota
Às vezes, o registro em log também é chamado de 'rastreamento', inclusive em algumas das APIs mais antigas do Windows e do .NET. Nos últimos anos, 'rastreamento' é mais comumente usado como uma abreviação para Distributed tracing, mas esse não é o significado neste artigo.
APIs de log do .NET
ILogger
Para a maioria dos casos, seja adicionando log a um projeto existente ou criando um novo projeto, a infraestrutura ILogger é uma boa opção padrão. ILogger
Suporta registro estruturado rápido, configuração flexível e uma coleção de coletores comuns, incluindo o console, que é o que você vê ao executar um aplicativo ASP.NET. Além disso, a ILogger
interface também pode servir como uma fachada sobre muitas implementações de log de terceiros que oferecem funcionalidade rica e extensibilidade.
O ILogger fornece a história de registro para a implementação do OpenTelemetry para .NET, que permite a saída de logs de seu aplicativo para uma variedade de sistemas APM para análise adicional.
Fonte de eventos
EventSource é uma API mais antiga e de alto desempenho com registro estruturado. Ele foi originalmente projetado para se integrar bem com o Event Tracing for Windows (ETW), mas mais tarde foi estendido para suportar o rastreamento multiplataforma EventPipe e EventListener para coletores personalizados. Em comparação com o ILogger
, EventSource
tem relativamente poucos coletores de log pré-fabricados e não há suporte interno para configurar por meio de arquivos de configuração separados. EventSource
é excelente se você quiser um controle mais rígido sobre a integração ETW ou EventPipe , mas para registro de uso geral, ILogger
é mais flexível e fácil de usar.
Rastreio
System.Diagnostics.Trace e System.Diagnostics.Debug são . APIs de log mais antigas da NET. Essas classes têm APIs de configuração flexíveis e um grande ecossistema de coletores, mas suportam apenas o registro em log não estruturado. No .NET Framework, eles podem ser configurados por meio de um arquivo app.config, mas no .NET Core, não há nenhum mecanismo de configuração interno baseado em arquivo. Eles são normalmente usados para produzir saída de diagnóstico para o desenvolvedor durante a execução sob o depurador. A equipe do .NET continua a oferecer suporte a essas APIs para fins de compatibilidade com versões anteriores, mas nenhuma nova funcionalidade será adicionada. Essas APIs são uma ótima opção para aplicativos que já as usam. Para aplicativos mais recentes que ainda não se comprometeram com uma API de registro, ILogger
podem oferecer melhor funcionalidade.
APIs de registro em log especializadas
Consola
A System.Console classe tem os Write métodos e WriteLine que podem ser usados em cenários de log simples. Essas APIs são muito fáceis de começar, mas a solução não será tão flexível quanto uma API de registro de uso geral. O console só permite o registro em log não estruturado e não há suporte de configuração para selecionar quais mensagens de log estão habilitadas ou para redirecionar para um coletor diferente. Usar as APIs ILogger ou Trace com um coletor de console não exige muito esforço adicional e mantém o registro configurável.
DiagnosticSource
System.Diagnostics.DiagnosticSource destina-se ao registro em log onde as mensagens de log serão analisadas de forma síncrona em processo em vez de serializadas para qualquer armazenamento. Isso permite que a origem e o ouvinte troquem objetos .NET arbitrários como mensagens, enquanto a maioria das APIs de log exige que o evento de log seja serializável. Esta técnica também pode ser extremamente rápida, manipulando eventos de log em dezenas de nanossegundos se o ouvinte for implementado de forma eficiente. As ferramentas que usam essas APIs geralmente agem mais como criadores de perfil em processo, embora a API não imponha nenhuma restrição aqui.
Registo de Eventos
System.Diagnostics.EventLog é uma API somente do Windows que grava mensagens no Log de Eventos do Windows. Em muitos casos, usar o ILogger com um coletor EventLog opcional durante a execução no Windows pode fornecer funcionalidade semelhante sem acoplar o aplicativo firmemente ao sistema operacional Windows.
Terminologia de registo
Registo estruturado e não estruturado
O registro em log pode ser estruturado ou não:
- Não estruturado: as entradas de log são codificadas como texto de forma livre que os humanos podem ler, mas é difícil analisar e consultar programaticamente.
- Estruturado: As entradas de log têm um esquema bem definido e podem ser codificadas em diferentes formatos binários e textuais. Esses logs são projetados para serem traduzíveis por máquina e consultáveis para que humanos e sistemas automatizados possam trabalhar com eles facilmente.
Boas APIs de log estruturado podem oferecer mais funcionalidade e desempenho com apenas um pequeno aumento na complexidade de uso.
Pias
A maioria das APIs de log permite que mensagens de log sejam enviadas para diferentes destinos chamados coletores. Algumas APIs têm um grande número de pias pré-fabricadas, enquanto outras têm apenas algumas. Se não existir um coletor pré-fabricado, geralmente há uma API de extensibilidade que permitirá que você crie um coletor personalizado, embora isso exija escrever um pouco mais de código.