Rust:
Pisanie do standardowego błędu

Jak to zrobić:

Rust oferuje prosty sposób na pisanie do stderr za pomocą makra eprintln!, podobnie jak println! jest używane dla stdout. Oto podstawowy przykład:

fn main() {
    eprintln!("To jest komunikat o błędzie!");
}

Przykładowe wyjście (do standardowego błędu):

To jest komunikat o błędzie!

Aby mieć większą kontrolę nad komunikatami o błędach, na przykład kiedy chcesz formatować tekst lub obsługiwać wyniki operacji I/O, użyj funkcji stderr z modułu std::io. Ta metoda dostarcza uchwyt do globalnego strumienia stderr, do którego możesz następnie pisać, używając metod takich jak write_all lub writeln z cechy Write:

use std::io::{self, Write};

fn main() {
    let stderr = io::stderr();
    let mut handle = stderr.lock();
    
    writeln!(handle, "Sformatowany komunikat o błędzie: {}", 404).expect("Nie udało się zapisać do stderr");
}

Przykładowe wyjście (do standardowego błędu):

Sformatowany komunikat o błędzie: 404

Jeśli pracujesz w środowiskach lub aplikacjach, gdzie polegasz na bibliotekach do logowania lub obsługi błędów, popularne są takie biblioteki jak log i env_logger. Chociaż są one używane bardziej do celów logowania, są konfigurowalne i mogą kierować poziomy logowania błędów do stderr. Poniżej znajduje się prosty przykład użycia log i env_logger:

Najpierw dodaj zależności do pliku Cargo.toml:

[dependencies]
log = "0.4"
env_logger = "0.9"

Następnie, skonfiguruj i użyj logowania w swojej aplikacji:

fn main() {
    env_logger::init();
    log::error!("Ten komunikat o błędzie został zalogowany do stderr");
}

Uruchomienie tego programu (po skonfigurowaniu env_logger z odpowiednią zmienną środowiskową, na przykład RUST_LOG=error) spowoduje wyjście komunikatu o błędzie do stderr, wykorzystując infrastrukturę logowania.

ERROR: Ten komunikat o błędzie został zalogowany do stderr