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

相关推荐
layman05281 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔1 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李1 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN1 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒1 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库1 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_180079052472 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
晓晓莺歌2 小时前
vue3某一个路由切换,导致所有路由页面均变成空白页
前端·vue.js
Up九五小庞2 小时前
开源埋点分析平台 ClkLog 本地部署 + Web JS 埋点测试实战--九五小庞
前端·javascript·开源
qq_177767373 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos