Rust:
Ghi vào lỗi chuẩn

Làm thế nào:

Rust làm cho việc viết vào stderr trở nên đơn giản. Sử dụng macro eprintln! cho văn bản, giống như println! nhưng dành cho lỗi.

fn main() {
    // Đầu ra thường thức
    println!("Đây là một thông điệp bình thường.");

    // Đầu ra lỗi
    eprintln!("Đây là một thông điệp lỗi.");
}

Đầu ra mẫu:

Đây là một thông điệp bình thường.
Đây là một thông điệp lỗi.

Chú ý rằng thông điệp lỗi chuyển đi stderr. Trên một cửa sổ dòng lệnh, bạn sẽ không thấy sự khác biệt. Tuy nhiên, nếu bạn chuyển hướng stdout, stderr vẫn hiện lên trong cửa sổ dòng lệnh.

$ cargo run > output.txt
Đây là một thông điệp lỗi.

Ở đây output.txt chỉ chứa “Đây là một thông điệp bình thường.”

Sâu hơn

Theo lịch sử, việc tách biệt stdout và stderr cho phép các hệ thống Unix xử lý dữ liệu thường thức và lỗi một cách khác nhau. Đây là một phương pháp tốt và giúp ích cho việc tự động hóa và ghi nhật ký.

Các lựa chọn thay thế cho việc viết vào stderr ở mức thấp hơn, như sử dụng std::io::stderr. Nó cung cấp nhiều quyền kiểm soát hơn và làm việc tốt với dữ liệu không phải văn bản.

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

fn main() -> io::Result<()> {
    let stderr = &mut std::io::stderr();
    
    // Viết trực tiếp một chuỗi vào stderr
    writeln!(stderr, "Lỗi: Không thể hoàn thành thao tác")?;
    
    Ok(())
}

Bên dưới lớp vỏ, eprintln! là một macro đóng gói writeln! vào stderr, giữ cho mọi thứ được DRY (Don’t Repeat Yourself - Đừng Lặp Lại Chính Mình).

Xem Thêm

Để biết thêm về xử lý lỗi và ghi nhật ký: