Skip to content

介绍

快速开始

rust
use std::process;
use env_logger::Builder;
use log::{debug, error, info, trace, warn, LevelFilter};

// 启动日志引擎
fn setup_logger() -> Result<(), Box<dyn std::error::Error>> {
    // 创建日志构建器实例, 并且设置日志风格/过滤等级/输出位置
    Builder::new()
        .target(env_logger::Target::Stdout)        // 默认输出到标准错误 Stderr, 输出到 Stderr 可以在测试中输出日志
        .filter(None, LevelFilter::Trace)          // 设置过滤等级, 默认是 Error, 也就是说低于error级别的日志都不会输出
        .write_style(env_logger::WriteStyle::Auto) // 使用默认的输出风格(Always/Auto/Never)
        .init();

    Ok(())
}

fn main() {
    // 如果无法初始化日志引擎就退出程序
    if let Err(e) = setup_logger() {
        eprintln!("Application error: Can not setup logger.\n{}", e);
        process::exit(1);
    }

    trace!("some trace message");
    debug!("some debug message");
    info!("some info message");
    warn!("some warn message");
    error!("some error message");
}
rust
// 进程/文件处理
use std::{fs, io::Write, process};

// 处理时间日期
use chrono::Local;

// 处理日志
use env_logger::Builder;
use log::{LevelFilter, debug, error, info, trace, warn};

// 启动日志引擎
fn setup_logger_save_path() -> String {
    // 处理日志保存路径(Cargo.toml 文件同级的 logs 目录下)
    let save_path = "/logs/";
    let mut log_file_path = String::new();
    log_file_path.push_str(env!("CARGO_MANIFEST_DIR"));
    log_file_path.push_str(save_path);

    // 创建目录(如果不存在)
    if fs::metadata(&log_file_path).is_err() {
        fs::create_dir(&log_file_path).unwrap();
    }

    // 按日期保存日志(一天一个, 如果是不会自动退出的程序需要重启才行)
    let today = Local::now().format("%Y-%m-%d").to_string();
    log_file_path.push_str(&today);
    log_file_path.push_str(".log");

    log_file_path
}

// 将日志输出到文件
fn setup_logger() -> Result<(), Box<dyn std::error::Error>> {
    let log_file_path = setup_logger_save_path();

    // 根据日志文件路径创建文件
    let log_file = Box::new(fs::File::create(log_file_path).unwrap());

    // 创建日志构建器实例, 并且设置日志风格/过滤等级/输出位置
    Builder::new()
        .target(env_logger::Target::Pipe(log_file))    // 使用管道将输出重定向到文件
        .filter(None, LevelFilter::Trace)
        // .write_style(env_logger::WriteStyle::Never) // 使用默认的输出风格(Always/Auto/Never)
        .format(|buf, record| {
            // 不使用默认的输出格式, 自定义日志输出格式
            writeln!(
                buf,
                "[{} {} {}:{}] {}",
                Local::now().format("%Y-%m-%d %H:%M:%S%.3f"),
                record.level(),
                record.file().unwrap_or("unknown"),
                record.line().unwrap_or(0),
                record.args()
            )
        })
        .init();

    Ok(())
}

fn main() {
    // 如果无法初始化日志引擎就退出程序
    if let Err(e) = setup_logger() {
        eprintln!("Application error: Can not setup logger.\n{}", e);
        process::exit(1);
    }

    // 手动记录一些日志信息
    trace!("some trace message");
    debug!("some debug message");
    info!("some info message");
    warn!("some warn message");
    error!("some error message");
}
toml
[dependencies]
log = "0.4.22"
env_logger = "0.11.5"
chrono = "0.4.38"

Released under the MIT License.