网站开发 创造收益,商务网站建设详细步骤,wordpress文章目录插件,公司注册网上核名官网本文提供了一种通过log4rs库记录日志的方法。这里没有采用读取yaml文件的方式#xff0c;而是通过对象构造的方式来初始化日志#xff0c;用于发包时不带配置文件的场景。
初始化日志
在release环境#xff0c;仅需要将日志打印到文件中#xff0c;而日常开发时#xff…本文提供了一种通过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_logP: AsRefPath(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_logP: AsRefPath(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|