十、Rust 集成日志工具

tech2025-01-08  10

十、Rust 集成日志工具      Rust 日志工具大体有 log、env_logger 和 log、log4rs 两套方案,所以看起来 log 只是日志 特性,相当于 Java 中的接口,另外两个是实现。 对比后发现,log4rs 的使用方式更灵活,如可基于代码来配置,或基于 yaml、toml 文件来声明等。      无论使用哪种实现,我们在工作中,都是面向的 log 特性来编码。

1、添加依赖

   Cargo.toml

[package] name = "..." edition = "2018" ... [dependencies] log4rs = "1.0.0-alpha-2" # log4rs for log ...

2、配置 log4rs

   根据项目首页的介绍,使用 log4rs 需要提供 log4rs.yaml 配置文件,并通过一行代码来初始化 log 引擎。

   log4rs.yaml

refresh_rate: 30 seconds appenders: stdout: kind: console encoder: pattern: "{d(%Y-%m-%d %H:%M:%S)} {h({l})} [{M}] - {m}{n}" root: level: debug appenders: - stdout

   为使项目界面保持简单,我们将这行初始化,放在了一个项目全局启动的地方。   boot/mod.rs

pub fn start() { log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); boot::db::init_db_pool() // TODO ... }

   Log4rs 的 pattern 支持以下内容:

d,data 日期,默认为 ISO 9601 格式,可以通过 {d(%Y-%m-%d %H:%M:%S)} 这种方式改变日期格式l,log 级别h,高亮显示,debug 灰,info 绿,warn 黄,error 红L,line log消息所在行数M,Module log 消息所在模块m,message log 消息n,具体平台的换行符X,mdc 映射诊断环境P,pid - The current process id.t,target - The target of the log message. 可能与 Module 相同T,thread - The name of the current thread. 线程名称I,thread_id - The ID of the current thread. 线程 ID

3、使用日志

   将前面的章节的 数据源 初始化部分,改为用 日志 输出。

pub fn init_db_pool() { if let Some(db) = &crate::boot::global().postgres { let pool = PgPoolOptions::new() .min_connections(db.min) .max_connections(db.max) .connect_lazy(&db.dsn).unwrap(); assert!(POSTGRES_POOL.set(pool).is_ok()); log::info!("DataSource {} {} ~ {}", db.dsn, db.min, db.max) } }

4、查看日志

   以 Mac + Clion 为例,Control + D,以 debug 模式启动服务。

2020-11-18 17:09:09 INFO [favorites::boot::db] - DataSource postgres://username:password@ip:5432/postgres 5 ~ 15 2020-11-18 17:09:09 INFO [actix_server::builder] - Starting 8 workers 2020-11-18 17:09:09 INFO [actix_server::builder] - Starting "actix-web-service-0.0.0.0:8080" service on 0.0.0.0:8080

    完事儿 ~     

最新回复(0)