Scrivere sull'errore standard

Rust:
Scrivere sull'errore standard

Come fare:

Rust offre un modo diretto per scrivere su stderr utilizzando la macro eprintln!, simile a come println! viene usata per stdout. Ecco un esempio basilare:

fn main() {
    eprintln!("Questo è un messaggio di errore!");
}

Output di esempio (a stderr):

Questo è un messaggio di errore!

Per avere più controllo sui messaggi di errore, come quando si desidera formattare il testo o gestire i risultati I/O, utilizzare la funzione stderr dal modulo std::io. Questo metodo fornisce un handle al flusso globale stderr, sul quale è possibile scrivere utilizzando metodi come write_all o writeln dal trait Write:

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

fn main() {
    let stderr = io::stderr();
    let mut handle = stderr.lock();
    
    writeln!(handle, "Messaggio di errore formattato: {}", 404).expect("Impossibile scrivere su stderr");
}

Output di esempio (a stderr):

Messaggio di errore formattato: 404

Se stai lavorando in ambienti o applicazioni dove fai affidamento su librerie per il logging o la gestione degli errori, librerie come log e env_logger sono popolari. Anche se sono usate più per scopi di logging, sono configurabili e possono indirizzare i livelli di log degli errori a stderr. Di seguito è riportato un esempio di utilizzo semplice con log e env_logger:

Prima, aggiungi le dipendenze al tuo Cargo.toml:

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

Poi, configura e usa il logging nella tua applicazione:

fn main() {
    env_logger::init();
    log::error!("Questo è un messaggio di errore loggato su stderr");
}

Eseguendo questo programma (dopo aver configurato env_logger con una variabile di ambiente appropriata, per esempio, RUST_LOG=error) verrà visualizzato il messaggio di errore su stderr, utilizzando l’infrastruttura di logging.

ERROR: Questo è un messaggio di errore loggato su stderr