抄底券网站怎么做的seo博客模板
本文提供了一种通过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|