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 :
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 :
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.
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