Tauri(十)—— 生产环境调试指南

前言

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");
}

建议 :在生产环境中,可以将日志级别设为 infowarn,避免过多 debug 级别日志。

2. 捕获错误日志

在生产环境中,我们需要捕获 前端 (JS/TS) 错误Rust 后端错误

前端错误捕获

index.tsxApp.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 生产环境中调试应用,可以使用:

  1. 日志收集 :使用 tauri-plugin-log 记录日志。
  2. 错误捕获 :监听前端 onerror 和 Rust panic::set_hook
  3. 远程调试 :启用 DevTools 或使用 chrome://inspect 进行 Webview 调试。
  4. 崩溃恢复 :使用 Sentry 监控 Rust 异常。
  5. 进程监控 :使用 tauri-plugin-process 监听应用状态。
  6. 自动更新 :使用 tauri-plugin-updater 进行远程更新。

这样可以帮助你更高效地在 生产环境 中调试和维护 Tauri 2 应用 🚀。

相关推荐
未来龙皇小蓝14 小时前
RBAC前端架构-02:集成Vue Router、Vuex和Axios实现基本认证实现
前端·vue.js·架构
魔力军14 小时前
Rust学习Day3: 3个小demo实现
java·学习·rust
晓得迷路了15 小时前
栗子前端技术周刊第 116 期 - 2025 JS 状态调查结果、Babel 7.29.0、Vue Router 5...
前端·javascript·vue.js
顾北1215 小时前
AI对话应用接口开发全解析:同步接口+SSE流式+智能体+前端对接
前端·人工智能
摸鱼的春哥15 小时前
春哥的Agent通关秘籍07:5分钟实现文件归类助手【实战】
前端·javascript·后端
Smart-Space15 小时前
htmlbuilder - rust灵活构建html
rust·html
念念不忘 必有回响15 小时前
viepress:vue组件展示和源码功能
前端·javascript·vue.js
C澒15 小时前
多场景多角色前端架构方案:基于页面协议化与模块标准化的通用能力沉淀
前端·架构·系统架构·前端框架
崔庆才丨静觅15 小时前
稳定好用的 ADSL 拨号代理,就这家了!
前端
魔力军15 小时前
Rust学习Day2: 变量与可变性、数据类型和函数和控制流
开发语言·学习·rust