Logging in Rust: Überblick über die besten Bibliotheken und Lösungen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 run


Besonderheiten:

  • 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// - file


Besonderheiten:

  • 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

Empfehlungen