Journalisation de trace dans Go avec des performances optimisées pour les instructions suspendues
Dans les chemins critiques, laisser les instructions de journalisation de débogage/trace de bas niveau permet l'exécution configuration pour les activer selon les besoins. Cette journalisation devrait avoir un impact minimal sur les instructions désactivées, idéalement limité à une vérification booléenne.
En C/C, les macros LOG sont évaluées uniquement après avoir vérifié un indicateur, appelant une fonction d'assistance uniquement si elle est activée. Comment Go peut-il y parvenir ?
L'utilisation de io.Discard avec log.Logger est inefficace, car les messages de journal sont entièrement formatés quelle que soit la désactivation.
Une approche consiste à créer un EnabledLogger avec un indicateur Enabled et déléguez log.Logger pour gérer la journalisation. Cela concerne le formatage, mais évalue les arguments quelle que soit leur activation.
Pour différer l'évaluation des arguments, envisagez d'utiliser les wrappers Stringify pour les valeurs complexes. Cependant, cette approche reste verbeuse et sujette aux erreurs.
Vous pouvez également vérifier manuellement l'activation avant de vous connecter. C'est plus concis mais nécessite de la discipline pour éviter les oublis.
En fin de compte, l'évaluation stricte des arguments par Go limite les options. Bien qu'ils ne soient pas parfaits pour la configurabilité de l'exécution, les modèles suivants sont viables :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!