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://[email protected]/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 应用 🚀。

相关推荐
難釋懷44 分钟前
Vue解决开发环境 Ajax 跨域问题
前端·vue.js·ajax
特立独行的猫a1 小时前
Nuxt.js 中的路由配置详解
开发语言·前端·javascript·路由·nuxt·nuxtjs
咸虾米1 小时前
在uniCloud云对象中定义dbJQL的便捷方法
前端·javascript
梨子同志1 小时前
JavaScript Proxy 和 Reflect
前端·javascript
汤圆炒橘子1 小时前
状态策略模式的优势分析
前端
90后的晨仔1 小时前
解析鸿蒙 ArkTS 中的 Union 类型与 TypeAliases类型
前端·harmonyos
IT_陈寒1 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·人工智能·后端
挑战者6668881 小时前
vue入门环境搭建及demo运行
前端·javascript·vue.js
贩卖纯净水.2 小时前
Webpack的基本使用 - babel
前端·webpack·node.js
维维酱2 小时前
Rust - 互斥锁
rust