Logging für Rust: Die besten Bibliotheken und Tools
Logging ist ein wesentlicher Bestandteil der Entwicklung jeder ernsthaften Anwendung. Im Rust-Ökosystem gibt es mehrere ausgereifte Lösungen, die eine flexible Steuerung der Nachrichtenausgabe, die Festlegung von Wichtigkeitsstufen und Formaten ermöglichen. In diesem Artikel betrachten wir die beliebtesten Bibliotheken zum Logging in Rust, ihre Besonderheiten und geben Anwendungsbeispiele.
1. Das grundlegende Trait log
Die Bibliothek log (Crate log) ist die Grundlage für alle Logging-Systeme in Rust. Sie stellt das abstrakte Trait Log und Makros (info!, warn!, error!, debug!, trace!) bereit. Allein gibt sie keine Daten aus – dafür wird eine Implementierung (Backend) benötigt.
// Cargo.toml// [dependencies]// log = "0.4"
use log::{info, warn, error};
fn main() { info!("Anwendung gestartet"); warn!("Niedriger Arbeitsspeicher: {} MB", 128); error!("Fehler bei der Datenbankverbindung");}Logging-Stufen nach aufsteigender Wichtigkeit: trace, debug, info, warn, error. Standardmäßig werden nur Nachrichten der Stufe info und höher ausgegeben.
2. env_logger – Einfach und beliebt
env_logger ist die am weitesten verbreitete Implementierung des Trait Log. Sie wird über die Umgebungsvariable RUST_LOG konfiguriert und gibt Nachrichten auf dem Standardfehlerstrom (stderr) aus.
// Cargo.toml// [dependencies]// log = "0.4"// env_logger = "0.10"
use log::info;
fn main() { env_logger::init(); info!("env_logger initialisiert");}
// Ausführung: RUST_LOG=info cargo runBesonderheiten:
- Minimale Konfiguration – eine Zeile
env_logger::init()reicht aus. - Filterung nach Modulen:
RUST_LOG=my_crate=debug,other_crate=info. - Unterstützung für farbige Ausgabe im Terminal.
- Ideal für kleine Dienstprogramme und Prototypen.
3. log4rs – Anpassbares Analogon zu log4j/log4net
log4rs (Crate log4rs) ist ein leistungsstarkes Framework, inspiriert von Java log4j. Es ermöglicht die Konfiguration des Loggings über YAML/JSON/TOML-Dateien oder programmatisch.
// Cargo.toml// [dependencies]// log = "0.4"// log4rs = "1.2"
use log::info;
fn main() { // Programmatische Konfiguration log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); info!("log4rs über Datei konfiguriert");}
// 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// - fileBesonderheiten:
- Unterstützung mehrerer Appender (Ausgabe in Datei, Konsole, syslog, network).
- Automatische Log-Rotation nach Größe oder Zeit.
- Filterung nach Modulen, Stufen, benutzerdefinierten Filtern.
- Empfohlen für Serveranwendungen und Microservices.
4. tracing – Asynchrones und strukturiertes Logging
tracing (Crate tracing) ist eine moderne Alternative, entwickelt vom Tokio-Team. Sie unterstützt strukturierte Ereignisse, Spans zur Verfolgung der Ausführungszeit und asynchrone Kontexte.
// Cargo.toml// [dependencies]// tracing = "0.1"// tracing-subscriber = "0.3"
use tracing::{info, span, Level};use tracing_subscriber::fmt;
fn main() { // Initialisierung des Subscribers fmt::init();
let span = span!(Lev Auch in der Bibliothek
Arbeiten mit ZIP-Archiven in PHP: vollständige Anleitung zu ZipArchive
Arbeiten mit CSV in Java: Bibliotheken OpenCSV, Apache Commons CSV und Java Scanner
lettre für Rust: Vollständige Anleitung mit Beispielen
Standardbibliothek von JavaScript (Node.js): vollständiger Überblick
BenchmarkDotNet für C# (.NET): Komplettguide mit Beispielen