Journalisation pour Rust : meilleures bibliothèques et outils
La journalisation est une partie essentielle du développement de toute application sérieuse. Dans l'écosystème Rust, il existe plusieurs solutions matures qui permettent de gérer flexiblement la sortie des messages, de définir des niveaux d'importance et des formats. Dans cet article, nous examinerons les bibliothèques de journalisation les plus populaires en Rust, leurs caractéristiques et donnerons des exemples d'utilisation.
1. Le trait de base log
La bibliothèque log (crate log) est la base de tous les systèmes de journalisation en Rust. Elle fournit le trait abstrait Log et des macros (info!, warn!, error!, debug!, trace!). En elle-même, elle n'affiche pas de données — une implémentation (backend) est nécessaire pour cela.
// Cargo.toml// [dependencies]// log = "0.4"
use log::{info, warn, error};
fn main() { info!("Application démarrée"); warn!("Faible mémoire disponible : {} Mo", 128); error!("Erreur de connexion à la base de données");}Niveaux de journalisation par ordre croissant d'importance : trace, debug, info, warn, error. Par défaut, seuls les messages de niveau info et supérieur sont affichés.
2. env_logger — un choix simple et populaire
env_logger est l'implémentation la plus courante du trait Log. Elle se configure via la variable d'environnement RUST_LOG et affiche les messages dans le flux d'erreur standard (stderr).
// Cargo.toml// [dependencies]// log = "0.4"// env_logger = "0.10"
use log::info;
fn main() { env_logger::init(); info!("env_logger initialisé");}
// Exécution : RUST_LOG=info cargo runCaractéristiques :
- Configuration minimale — une seule ligne
env_logger::init()suffit. - Filtrage par modules :
RUST_LOG=my_crate=debug,other_crate=info. - Prise en charge de l'affichage en couleur dans le terminal.
- Idéal pour les petits utilitaires et prototypes.
3. log4rs — un équivalent configurable de log4j/log4net
log4rs (crate log4rs) est un framework puissant, inspiré de Java log4j. Il permet de configurer la journalisation via des fichiers YAML/JSON/TOML ou par programmation.
// Cargo.toml// [dependencies]// log = "0.4"// log4rs = "1.2"
use log::info;
fn main() { // Configuration programmatique log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); info!("log4rs configuré via fichier");}
// log4rs.yaml// refresh_rate: 30 seconds// appenders:// stdout:// kind: console// encoder:// pattern: "{d(%Y-%m-%d %H:%M:%S)} {l} - {m}{n}"// file:// kind: file// path: "app.log"// encoder:// pattern: "{d} {l} {t} - {m}{n}"// root:// level: info// appenders:// - stdout// - fileCaractéristiques :
- Prise en charge de plusieurs appenders (sortie vers fichier, console, syslog, réseau).
- Rotation automatique des logs par taille ou par temps.
- Filtrage par modules, niveaux, filtres personnalisés.
- Recommandé pour les applications serveur et les microservices.
4. tracing — journalisation asynchrone et structurée
tracing (crate tracing) est une alternative moderne, développée par l'équipe Tokio. Elle prend en charge les événements structurés, les spans pour le suivi du temps d'exécution et les contextes asynchrones.
// Cargo.toml// [dependencies]// tracing = "0.1"// tracing-subscriber = "0.3"
use tracing::{info, span, Level};use tracing_subscriber::fmt;
fn main() { // Initialisation du subscriber fmt::init();
let span = span!(Lev Aussi dans la bibliothèque
Rate Limiting en Java : bibliothèques, algorithmes et implémentation
rustls pour Rust : guide complet avec exemples
Configuration des applications Go : la bibliothèque viper
gRPC pour Go (Golang) : bibliothèques, exemples et guide pratique
Mise en cache en PHP : Redis, Memcached et APCu — guide complet