rust - 使用log4rs打印日志

本文提供了一种通过log4rs库记录日志的方法。这里没有采用读取yaml文件的方式,而是通过对象构造的方式来初始化日志,用于发包时不带配置文件的场景。

初始化日志

在release环境,仅需要将日志打印到文件中,而日常开发时,为了方便调试代码,需要将日志同时打印到文件和终端控制台中,而且日志级别也不相同。可以通过如下宏判断环境。

#[cfg(debug_assertions)]

不同的环境采用不同的初始化方式。

use log::LevelFilter;
use log4rs::append::console::ConsoleAppender;
use log4rs::append::file::FileAppender;
use log4rs::config::{Appender, Config, Root};
use log4rs::encode::pattern::PatternEncoder;
use std::path::Path;

#[cfg(debug_assertions)]
pub fn init_log<P: AsRef<Path>>(log_path: P) {
    let file = FileAppender::builder()
        .encoder(Box::new(PatternEncoder::new(
            "{d(%Y-%m-%d %H:%M:%S)}|{l}|{m}|{n}",
        )))
        .build(log_path)
        .unwrap();

    let stdout = ConsoleAppender::builder()
        .encoder(Box::new(PatternEncoder::new(
            "{d(%Y-%m-%d %H:%M:%S)}|{l}|{m}|{n}",
        )))
        .build();

    let config = Config::builder()
        .appender(Appender::builder().build("stdout", Box::new(stdout)))
        .appender(Appender::builder().build("file", Box::new(file)))
        .build(
            Root::builder()
                .appender("stdout")
                .appender("file")
                .build(LevelFilter::Debug),
        )
        .unwrap();

    let _ = log4rs::init_config(config).unwrap();
}

#[cfg(not(debug_assertions))]
pub fn init_log<P: AsRef<Path>>(log_path: P) {
    let file = FileAppender::builder()
        .encoder(Box::new(PatternEncoder::new(
            "{d(%Y-%m-%d %H:%M:%S)}|{l}|{m}|{n}",
        )))
        .build(log_path)
        .unwrap();

    let config = Config::builder()
        .appender(Appender::builder().build("file", Box::new(file)))
        .build(Root::builder().appender("file").build(LevelFilter::Info))
        .unwrap();
}

单元测试

use log::debug;
use std::env;

#[test]
fn test_init_log() {
    let log_path = env::current_dir().unwrap().join("tests/test.log");
    init_log(log_path.as_path());

    debug!("test_init_log")
}

打印的日志内容如下

2024-03-23 22:35:40|DEBUG|test_init_log|

相关推荐

  1. rust - 使用log4rs打印

    2024-03-30 04:52:03       23 阅读
  2. Nestjs使用log4j打印

    2024-03-30 04:52:03       38 阅读
  3. log4j2配置

    2024-03-30 04:52:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 04:52:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 04:52:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 04:52:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 04:52:03       18 阅读

热门阅读

  1. Codeforces Round 806 (Div. 4)

    2024-03-30 04:52:03       20 阅读
  2. OpenCV的高级应用

    2024-03-30 04:52:03       21 阅读
  3. Vue3之setup方法

    2024-03-30 04:52:03       15 阅读
  4. python面试题(21~35)

    2024-03-30 04:52:03       17 阅读
  5. 深入理解Yarn:安装、配置与最佳实践

    2024-03-30 04:52:03       15 阅读
  6. iOS VideoToolBox 解码 HEVC Open-GOP 视频的问题排查

    2024-03-30 04:52:03       16 阅读
  7. vue 条件渲染

    2024-03-30 04:52:03       18 阅读
  8. Android 子module添加渠道配置异常

    2024-03-30 04:52:03       14 阅读