Qu'est-ce que Tracing et pourquoi en a-t-on besoin dans Rust ?
\n\nLa bibliothèque Tracing est un framework puissant pour la journalisation structurée et l'instrumentation (traçage) des applications en langage Rust. Contrairement aux simples enregistreurs, Tracing introduit le concept de spans et d'événements, qui permettent de suivre l'exécution du code dans le contexte d'opérations asynchrones, de systèmes distribués et d'appels imbriqués complexes.
\n\nL'objectif principal de Tracing est de donner au développeur une image complète de ce qui se passe à l'intérieur du programme : quelles fonctions sont appelées, combien de temps elles s'exécutent, quelles erreurs surviennent et comment elles sont liées entre elles. C'est un outil indispensable pour le débogage, le profilage et la surveillance des systèmes en production.
\n\nLa bibliothèque fait partie de l'écosystème Tokio et est activement utilisée dans des projets tels que actix-web, axum, hyper et bien d'autres.
Installation de Tracing
\n\nPour ajouter Tracing à votre projet Rust, ouvrez le fichier Cargo.toml et ajoutez les dépendances suivantes :
[dependencies]\ntracing = "0.1"\ntracing-subscriber = "0.3" # Pour afficher les logs dans la console\ntracing-appender = "0.2" # Pour écrire les logs dans un fichier (optionnel)\n\nEnsuite, exécutez la commande cargo build pour télécharger et compiler les bibliothèques.
Démarrage rapide : premier exemple
\n\nÉcrivons un programme très simple qui enregistre un message en utilisant Tracing :
\n\nuse tracing::{info, Level};\nuse tracing_subscriber::FmtSubscriber;\n\nfn main() {\n // Initialisons un abonné (subscriber) pour afficher les logs dans stdout\n let subscriber = FmtSubscriber::builder()\n .with_max_level(Level::INFO)\n .finish();\n tracing::subscriber::set_global_default(subscriber)\n .expect("Impossible de définir l'abonné global");\n\n // Enregistrons un message simple\n info!("Application démarrée !");\n\n // Appel d'une fonction avec traçage\n process_data("example.txt");\n}\n\nfn process_data(filename: &str) {\n // Créons un span pour suivre la fonction\n let span = tracing::span!(Level::INFO, "process_data", filename = filename);\n let _guard = span.enter(); // Entrons dans le span\n\n info!("Début du traitement du fichier");\n // ... un certain travail ...\n std::thread::sleep(std::time::Duration::from_millis(100));\n info!("Traitement terminé");\n}\n\nLors de l'exécution, vous verrez une sortie structurée avec des horodatages, des niveaux et des noms de spans.
\n\nMéthodes et fonctions principales de Tracing
\n\nVoici 10 fonctions et macros clés de la bibliothèque Tracing avec une description détaillée et des exemples.
\n\n1. tracing::span! — Création d'un span
\nCe qu'il fait : Crée un nouveau span — une unité de travail logique qui peut être imbriquée. Le span a un nom, un niveau et un ensemble de champs.
\nParamètres :
\n- \n
Level— le niveau de journalisation (ERROR, WARN, INFO, DEBUG, TRACE) \n target(optionnel) — une chaîne identifiant le module \n field = value— des champs arbitraires pour le contexte \n
Exemple :
\nuse tracing::Level;\n\nfn handle_request(id: u64) {\n let span = tracing::span!(Level::INFO, "handle_request", request_id = id);\n let _guard = span.enter();\n // Code à l'intérieur du span\n tracing::info!("Traitement de la requête");\n}\n\n2. tracing::info! — Journalisation au niveau INFO
\nCe qu'il fait : Enregistre un événement avec le niveau INFO. Un événement est un message unique qui peut être lié au span actuel.
\nParamètres :
\n- \n
- Chaîne de formatage (comme dans
format!) \n - Arguments pour le formatage \n
- Champs via
field = value<
Aussi dans la bibliothèque
Apprentissage automatique en C# : bibliothèques ML.NET et Accord.NET
Autorisation et authentification en Go (Golang) : JWT, OAuth2 et sessions
Génération de rapports PDF en Swift pour iOS et macOS avec PDFKit et Core Graphics
Travailler avec XML en Go : encoding/xml, bibliothèques et exemples