DAILY DOCDAILY DOC
Rust
Node
Notes
Ubuntu
Leetcode
  • it-tools
  • excalidraw
  • linux-command
Rust
Node
Notes
Ubuntu
Leetcode
  • it-tools
  • excalidraw
  • linux-command
  • rust

    • Rust
    • add
    • 属性(attributes)
    • cargo issue
    • cli
    • build.rs
    • Enums
    • eventEmitter(rust)
    • 格式化输出 std::fmt
    • rust iterator
    • rust 学习计划
    • 生命周期(lifetime)
    • Linked List
    • log
    • macros
    • mem::size_of
    • niche optimization
    • Rust 所有权
    • 模式匹配(pattern matching)
    • module system
    • result & option
    • .rust-analyzer.json
    • rust startup
    • rust-test
    • 可见性(visibility)
    • cargo
    • toml

log

1. log 和 env_logger

log 是 Rust 的标准日志记录库,它定义了一套统一的接口,供其他日志库实现。env_logger 是一个简单的日志记录实现,基于环境变量来配置日志级别和格式。

使用示例

首先,将 log 和 env_logger 添加到你的 Cargo.toml 文件中:

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

然后,在你的代码中初始化日志记录器并记录日志:

use log::{info, warn, error};
use env_logger;

fn main() {
    env_logger::init();

    info!("This is an info message.");
    warn!("This is a warning message.");
    error!("This is an error message.");
}

在运行程序时,你可以通过设置 RUST_LOG 环境变量来控制日志级别。例如:

RUST_LOG=info cargo run

2. slog

slog 是一个结构化日志记录库,提供了更多的灵活性和扩展性。它支持多种格式、输出目标以及更加细粒度的控制。

使用示例

首先,将 slog 及其相关依赖添加到你的 Cargo.toml 文件中:

[dependencies]
slog = "2.7"
slog-async = "2.7"
slog-term = "2.9"

然后,在你的代码中初始化 slog 日志记录器并记录日志:

use slog::{Drain, Logger, o, info, warn, error};
use slog_async;
use slog_term;

fn main() {
    let decorator = slog_term::TermDecorator::new().build();
    let drain = slog_term::CompactFormat::new(decorator).build().fuse();
    let drain = slog_async::Async::new(drain).build().fuse();
    let log = Logger::root(drain, o!());

    info!(log, "This is an info message.");
    warn!(log, "This is a warning message.");
    error!(log, "This is an error message.");
}

3. fern

fern 是另一个流行的日志库,它允许用户灵活地设置日志格式和输出目标。fern 是基于 log 接口的。

使用示例

首先,将 fern 和 log 添加到你的 Cargo.toml 文件中:

[dependencies]
fern = "0.6"
log = "0.4"

然后,在你的代码中初始化 fern 日志记录器并记录日志:

use fern::Dispatch;
use log::{info, warn, error};

fn main() {
    fern::Dispatch::new()
        .format(|out, message, record| {
            out.finish(format_args!(
                "{}[{}][{}] {}",
                chrono::Local::now().format("[%Y-%m-%d %H:%M:%S]"),
                record.target(),
                record.level(),
                message
            ))
        })
        .level(log::LevelFilter::Info)
        .chain(std::io::stdout())
        .apply()
        .unwrap();

    info!("This is an info message.");
    warn!("This is a warning message.");
    error!("This is an error message.");
}

4. flexi_logger

flexi_logger 提供了非常灵活的日志记录配置选项,包括日志文件滚动、不同日志级别的不同输出目标等。

使用示例

首先,将 flexi_logger 和 log 添加到你的 Cargo.toml 文件中:

[dependencies]
flexi_logger = "0.22"
log = "0.4"

然后,在你的代码中初始化 flexi_logger 日志记录器并记录日志:

use flexi_logger::{Logger, WriteMode};
use log::{info, warn, error};

fn main() {
    Logger::try_with_str("info")
        .unwrap()
        .write_mode(WriteMode::BufferAndFlush)
        .start()
        .unwrap();

    info!("This is an info message.");
    warn!("This is a warning message.");
    error!("This is an error message.");
}

总结

  • log 和 env_logger:简单、快速设置,适合大多数常见的日志记录需求。
  • slog:适合需要结构化日志记录、高度可扩展性的场景。
  • fern:灵活的日志配置,适合需要自定义格式和输出的场景。
  • flexi_logger:提供文件滚动、不同日志级别不同输出目标的高级功能。

根据你的具体需求选择合适的日志库,以上示例展示了如何使用这些库进行日志记录。

Last Updated:
Contributors: rosendo
Prev
Linked List
Next
macros