"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment obtenir une journalisation efficace des déclarations désactivées dans Go ?

Comment obtenir une journalisation efficace des déclarations désactivées dans Go ?

Publié le 2024-11-08
Parcourir:905

How to Achieve Efficient Logging for Disabled Statements in Go?

Journalisation efficace des instructions désactivées dans Go

Dans les chemins critiques, il est avantageux d'intégrer des instructions de journalisation de débogage/trace qui peuvent être basculées dynamiquement à exécution. Cette pratique est idéale pour déboguer les systèmes de production mis hors ligne ou tester les systèmes reflétant l'environnement de production.

Cependant, il existe une exigence cruciale pour ce type de journalisation : les instructions désactivées doivent avoir un impact minimal sur les performances. Dans C/C, cela a été réalisé grâce à une macro LOG qui supprimait l'évaluation des arguments jusqu'à ce qu'un indicateur soit vérifié.

Implémentation de la journalisation désactivée dans Go

Émulation de ce comportement dans Go présente des défis. L'utilisation de io.Discard avec log.Logger n'est pas une option car elle formate les messages du journal même lorsqu'elle est désactivée.

Une première tentative avec une structure EnabledLogger implémente l'interface log.Logger, activant/désactivant la journalisation en fonction de l'option Enabled drapeau. Cependant, l'évaluation des arguments n'est pas supprimée, ce qui peut entraîner des problèmes de performances pour les appels de fonctions arbitraires.

Deux solutions de contournement

Pour résoudre ce problème, il existe deux solutions de contournement :

  1. Types de wrapper : Utilisez des types de wrapper pour différer les appels de fonction, en garantissant que les expressions ne sont pas évaluées tant que la vérification activée n'est pas réussie.
  2. Vérifications manuelles : Enveloppez manuellement l'instruction de journalisation avec une vérification activée pour empêcher l'exécution si elle est désactivée.

Les deux approches aboutissent à un code verbeux et sujet aux erreurs, ouvrant la porte à de potentielles régressions de performances.

Autres options

Malgré les règles d'évaluation statique de Go, il existe quelques options supplémentaires :

  • Formateurs de journaux personnalisés : Tirer parti de fmt.Stringer et les interfaces fmt.GoStringer peuvent retarder le formatage des arguments jusqu'au moment de l'exécution.
  • Échange de l'enregistreur d'exécution : L'ensemble du mécanisme de journalisation peut être remplacé via une interface d'enregistreur ou des contraintes de construction.
  • Go Code Generation : Les techniques avancées de génération de code peuvent potentiellement prétraiter le code en analysant l'AST et en générant des versions de débogage spécialisées.

Bien que ces solutions ne soient pas idéales pour la configuration d'exécution dynamique, ils peuvent introduire des améliorations de performances dans des scénarios spécifiques.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3