Rust:
Запис до стандартної помилки

Як це зробити:

Rust надає простий спосіб запису в stderr за допомогою макросу eprintln!, подібно до того, як використовується println! для stdout. Ось базовий приклад:

fn main() {
    eprintln!("Це повідомлення про помилку!");
}

Приклад виводу (у стандартний потік помилок):

Це повідомлення про помилку!

Для більшого контролю над повідомленнями про помилки, наприклад, коли ви хочете форматувати текст чи обробляти результати введення/виведення, використовуйте функцію stderr з модуля std::io. Цей метод надає дескриптор до глобального потоку stderr, до якого ви потім можете записувати за допомогою методів, таких як write_all або writeln з трейта Write:

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

fn main() {
    let stderr = io::stderr();
    let mut handle = stderr.lock();
    
    writeln!(handle, "Форматоване повідомлення про помилку: {}", 404).expect("Не вдалося записати в stderr");
}

Приклад виводу (у стандартний потік помилок):

Форматоване повідомлення про помилку: 404

Якщо ви працюєте в середовищах або додатках, де ви покладаєтеся на бібліотеки для журналювання або обробки помилок, такі бібліотеки, як log та env_logger, є популярними. Хоча вони використовуються більше для цілей журналювання, вони є налаштовуваними і можуть направляти рівні журналу помилок до stderr. Нижче наведено простий приклад використання log та env_logger:

Спочатку додайте залежності до вашого Cargo.toml:

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

Потім налаштуйте та використовуйте журналювання у вашому додатку:

fn main() {
    env_logger::init();
    log::error!("Це повідомлення про помилку, записане до stderr");
}

Запуск цієї програми (після налаштування env_logger з відповідною змінною оточення, наприклад, RUST_LOG=error) виведе повідомлення про помилку в stderr, використовуючи інфраструктуру журналювання.

ERROR: Це повідомлення про помилку, записане до stderr