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 应用 🚀。

相关推荐
Ronin-Lotus20 分钟前
程序代码篇---Python随机数
前端·python·学习·随机数
Y编程小白2 小时前
ECMAScript--promise的使用
开发语言·前端·ecmascript
柠檬豆腐脑2 小时前
从前端到全栈:Jenkins 自动化部署 Node.js后端+ Vue.js 前端
前端·ci/cd·jenkins
朦胧之3 小时前
Expo 框架开发移动应用
前端·react native
浪遏4 小时前
NestJs👈 | 前端spring🤔| 项目创建与项目结构解析
前端·javascript·后端
我命由我123455 小时前
前端性能优化指标 - DCL(触发时机、脚本对 DCL 的影响、CSS 对 DCL 的影响)
开发语言·前端·javascript·css·性能优化·html·js
轻口味5 小时前
Vue.js 什么是 Vuex?
前端·javascript·vue.js
LCG元5 小时前
Vue.js组件开发-实现全屏平滑移动、自适应图片全屏滑动切换
前端·javascript·vue.js
杯面的汤7 小时前
Vue3 Openlayers 教程(一)Openlayers 简介与如何使用 Openlayers 地图 加载一副基本的 OSM地图
前端·vue.js