上一篇我们从零搭好了 Rust + QML 基础工程,实现了 Rust 逻辑与 QML 界面的双向通信。对于前端开发者来说,日志 = 控制台调试 ,是排查问题、追踪流程的必备工具 ------ 就像前端离不开 console.log、debugger,Rust + QML 开发也必须有一套好用的日志体系。
这一篇我会用前端能直接看懂 的方式,带你快速搭建Rust 日志 + QML 日志互通的完整环境,再也不用在黑盒里写代码。
一、为什么要做日志?(前端版理解)
- Rust 后台逻辑报错、数据变化、函数调用,需要看得见;
- QML 界面的
console.log要能和 Rust 日志一起输出; - 统一日志级别、过滤信息,像前端 Chrome DevTools 一样好用;
- 不用每次运行都手动加参数,做到进入项目自动生效。
简单说:日志 = Rust + QML 版的控制台调试面板。
二、第一步:给项目加日志依赖
和前端 npm install 一样,Rust 用 Cargo.toml 管理依赖。
打开项目根目录的 Cargo.toml ,在 [dependencies] 里添加:
toml
ini
log = "0.4"
env_logger = "0.9"
- log:Rust 官方日志门面(统一接口),相当于前端日志规范;
- env_logger :日志实现器,负责打印、级别控制,相当于
console实现。
三、第二步:在 main 函数初始化日志
打开 src/main.rs ,在 main 函数最开头加两行代码:
rust
运行
c
fn main() {
// 初始化 Qt → Rust 日志桥(让 QML 的 log 也进 Rust 日志)
qmetaobject::log::init_qt_to_rust();
// 启动 env_logger 日志系统
env_logger::init();
// 测试日志输出
info!("日志系统启动成功!");
// ......下面是原来的 QML 引擎、注册类型代码不变
}
前端等价理解
init_qt_to_rust():把 QML 的console.log桥接到 Rust 日志,两端日志打通;env_logger::init():启动日志器,相当于前端启用console;info!():就是 Rust 版的console.info()。
四、第三步:带日志级别运行项目
终端执行:
bash
运行
ini
RUST_LOG=warn,error,info,debug,trace cargo run
日志级别从低到高:
error:严重错误(对应console.error)warn:警告(console.warn)info:普通信息(console.info)debug:调试信息trace:最详细追踪日志
运行后你会看到:
- Rust 里的
info!输出 - QML 里写
console.log("测试")也会一起打印两端日志完全打通,像在浏览器里一样舒服。
五、第四步:进阶优化 ------ 自动加载日志变量(前端必看)
每次运行都敲一长串 RUST_LOG=xxx 太麻烦,就像前端不想每次都设置 NODE_ENV。
我们用 direnv 实现:进入项目目录 → 自动启用日志级别****退出项目 → 自动失效
1. 安装 direnv
- Ubuntu/Debian:
sudo apt install direnv - Fedora/RHEL:
sudo dnf install direnv - Arch:
yay -S direnv
2. 把 direnv 挂到终端
Zsh 用户在 ~/.zshrc 加一行:
bash
运行
bash
eval "$(direnv hook zsh)"
Bash 用户加:
bash
运行
bash
eval "$(direnv hook bash)"
然后重启终端或执行 source ~/.zshrc。
3. 项目根目录新建 .envrc
内容只有一行:
bash
运行
ini
export RUST_LOG=error,warn,info,debug,trace
4. 第一次进入项目允许配置
bash
运行
direnv allow
以后:
cd 项目目录→ 自动启用日志cd ..退出 → 自动清空完全自动化,一劳永逸。
六、总结(前端一句话复盘)
这一篇我们完成了三件事:
- 给 Rust + QML 项目装上日志系统,相当于装上浏览器控制台;
- 打通 Rust 日志 ↔ QML console.log,两端统一输出;
- 用 direnv 实现日志环境变量自动生效,不用重复敲命令。
现在你写 Rust 逻辑、QML 界面,都能清晰看到执行流程、报错信息,开发体验直接拉满。