前言
Tauri 2 生产环境的调试方法与 Tauri 1.x 有些不同,以下是针对 Tauri 2 的一些调试方法,包括日志收集、错误捕获、远程调试、崩溃恢复等。
1. 启用日志 (Logging)
Tauri 2 仍然支持 tauri-plugin-log
记录日志,并且新增了一些改进。
安装 tauri-plugin-log
sh
cargo tauri plugin add log
配置 tauri.conf.json
在 src-tauri/tauri.conf.json
添加:
json
{
"plugins": {
"log": {
"level": "info",
"targets": ["logDir", "stdout"]
}
}
}
logDir
会将日志保存在AppData
目录,stdout
则输出到终端(如果可用)。
在 Rust 代码中初始化日志
在 src-tauri/src/main.rs
:
rs
use tauri_plugin_log::{LogTarget};
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_log::Builder::default()
.targets([LogTarget::LogDir, LogTarget::Stdout])
.build())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
建议 :在生产环境中,可以将日志级别设为
info
或warn
,避免过多debug
级别日志。
2. 捕获错误日志
在生产环境中,我们需要捕获 前端 (JS/TS) 错误 和 Rust 后端错误。
前端错误捕获
在 index.tsx
或 App.tsx
中:
tsx
window.onerror = function (message, source, lineno, colno, error) {
console.error("Uncaught Error:", { message, source, lineno, colno, error });
};
window.addEventListener("unhandledrejection", function (event) {
console.error("Unhandled Promise Rejection:", event.reason);
});
如果你希望将错误发送到 Rust 进行日志记录:
tsx
import { invoke } from "@tauri-apps/api/core";
window.onerror = function (message, source, lineno, colno, error) {
invoke("log_error", { message, source, lineno, colno, error: error?.stack });
};
Rust 后端错误捕获
在 src-tauri/src/main.rs
:
rs
use std::panic;
fn main() {
panic::set_hook(Box::new(|panic_info| {
let message = format!("Application crashed: {:?}", panic_info);
eprintln!("{}", message);
}));
tauri::Builder::default()
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
如果希望记录到文件:
rs
use log::error;
fn main() {
panic::set_hook(Box::new(|panic_info| {
let message = format!("Application crashed: {:?}", panic_info);
error!("{}", message);
}));
}
3. 生产环境远程调试
Tauri 2 提供了 前端 (Webview) 和 后端 (Rust) 的调试方式。
启用 DevTools
在 src-tauri/src/main.rs
:
rs
fn main() {
tauri::Builder::default()
.setup(|app| {
let window = app.get_window("main").unwrap();
window.open_devtools();
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
注意 :不要在正式发布的版本中启用
open_devtools()
,否则可能暴露调试信息。
连接 Webview 调试
在 macOS 或 Linux:
sh
pnpm tauri dev --debug
然后在 Chrome 打开 chrome://inspect/#devices
,找到你的 Tauri 应用并进行调试。
启用远程调试
如果希望在生产环境远程调试:
ini
RUST_BACKTRACE=full tauri build
然后使用 RUST_BACKTRACE=1
启动应用,可以获取更详细的错误信息。
4. 处理崩溃和异常
在生产环境中,应用可能会崩溃,我们可以使用 Sentry 或 自定义错误日志 进行异常处理。
使用 Sentry
进行崩溃跟踪
安装:
sh
cargo add sentry
在 src-tauri/src/main.rs
:
rs
use sentry::{init, ClientOptions};
fn main() {
let _guard = init(ClientOptions {
dsn: Some("https://your-sentry-dsn@sentry.io/project-id".into()),
release: Some("1.0.0".into()),
..Default::default()
});
tauri::Builder::default()
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
这样,每当 Rust 端发生 panic,错误信息就会被发送到 Sentry。
5. 监控应用状态
如果你希望在生产环境监控应用状态,比如进程是否正常,可以使用 tauri-plugin-process
。
安装
sh
cargo tauri plugin add process
在 src-tauri/src/main.rs
:
rs
use tauri_plugin_process::ProcessExt;
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_process::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
前端调用:
tsx
import { exit, relaunch } from "@tauri-apps/plugin-process";
const restartApp = () => {
relaunch();
};
const closeApp = () => {
exit();
};
6. 生产环境自动更新
如果应用发布后需要推送更新,可以使用 tauri-plugin-updater
。
安装
sh
cargo tauri plugin add updater
在 src-tauri/tauri.conf.json
:
json
{
"plugins": {
"updater": {
"endpoints": ["https://your-update-server.com/latest.json"]
}
}
}
Rust 代码:
rs
use tauri_plugin_updater::UpdaterExt;
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_updater::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
前端:
tsx
import { checkUpdate, installUpdate } from "@tauri-apps/plugin-updater";
const updateApp = async () => {
const { shouldUpdate } = await checkUpdate();
if (shouldUpdate) {
await installUpdate();
}
};
小结
在 Tauri 2 生产环境中调试应用,可以使用:
- 日志收集 :使用
tauri-plugin-log
记录日志。 - 错误捕获 :监听前端
onerror
和 Rustpanic::set_hook
。 - 远程调试 :启用
DevTools
或使用chrome://inspect
进行 Webview 调试。 - 崩溃恢复 :使用
Sentry
监控 Rust 异常。 - 进程监控 :使用
tauri-plugin-process
监听应用状态。 - 自动更新 :使用
tauri-plugin-updater
进行远程更新。
这样可以帮助你更高效地在 生产环境 中调试和维护 Tauri 2 应用 🚀。