Tauri 开发实践 — Tauri 日志记录功能开发

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。

本文首发微信公众号:前端徐徐。

前言

日志记录是任何应用程序的关键部分,它能够提供宝贵的行为洞察并帮助调试。在本文中,我们将探讨如何为您的 Tauri 应用程序配置日志记录,Tauri 是一个强大的框架,允许您使用 Web 技术构建桌面应用程序。我们将介绍设置日志记录、将其集成到您的 Rust 和 JavaScript 代码中以及控制日志输出的步骤。让我们深入了解,并增强您的 Tauri 应用程序的日志记录能力。

配置日志记录

首先,我们需要将 log crate 添加到 Rust 项目中。

[dependencies]
tauri = { version = "1", features = ["shell-open"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
log = "0.4.21"

log 插件只允许使用 log 宏(例如 log::info!(), log::error!() 等)。与之配套的是日志处理程序。在 Rust 生态系统中有许多日志处理程序,但幸运的是,Tauri 社区已经构建了一个定制的日志处理程序,可以让您从 Rust 或 JavaScript 中记录日志,并将这些日志语句合并到相同的一组定义的日志目标中(例如 STDOUT、文件甚至开发者控制台)。

安装和配置默认的 Tauri 日志处理程序只需几个步骤。

目前插件是从 Github 安装的,因此最简单的方法是将以下行添加到您的 Cargo.toml 文件中(根据它们的文档)。

[dependencies]
tauri = { version = "1", features = ["shell-open"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
log = "0.4.21"
tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }

完成 Cargo 设置后,根据您的包管理器,需要以一种方式安装。

pnpm add https://github.com/tauri-apps/tauri-plugin-log#v1
# 或者
npm add https://github.com/tauri-apps/tauri-plugin-log#v1
# 或者
yarn add https://github.com/tauri-apps/tauri-plugin-log#v1

接下来,我们需要在 main.rs 文件中配置日志记录器,并将插件添加到 Tauri Builder 中。

// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use tauri_plugin_log::{LogTarget}; //## 添加此 use 语句
#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello, {}! You've been greeted from Rust!", name)
}
fn main() {
    tauri::Builder::default()
        //## 添加此插件语句
        .plugin(tauri_plugin_log::Builder::default().targets([
            LogTarget::Stdout,
            LogTarget::Webview,
        ]).build())
        // ##
        .invoke_handler(tauri::generate_handler![greet])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

LogTarget 是日志语句将出现的位置:

  • LogTarget::Stdout:控制台
  • LogTarget::Webview:Tauri 窗口中的开发者控制台

此外,您还可以添加 LogTarget::LogDir:基于操作系统的指定日志文件夹,如下表所示。

  • bundleIdentifier 可以在 tauri.conf.json 文件的 tauri->bundle->identifier 下找到

OS

格式

例子

macOS

{homeDir}/Library/Logs/{bundleIdentifier}

/Users/Alice/Library/Logs/com.tauri.dev

Linux

{configDir}/{bundleIdentifier}

/home/alice/.config/com.tauri.dev

Windows

{configDir}/{bundleIdentifier}

C:\Users\Alice\AppData\Roaming\com.tauri.dev

调用打印

在 main.rs 调用,这是我们之前的 change_menu_language 函数,之前是打印的模式,我们现在换成 log::info! 的方法。

fn change_menu_language(config: tauri::State<'_, Config>, lang: &str) {
    log::info!("change_menu_language: {}", lang);
    if let Err(e) = write_data_to_file(&config, lang) {
        eprintln!("Error writing file: {}", e);
    }
}

为了在 Webview 控制台中查看日志(LogTarget::Webview),您需要从 JavaScript 调用 attachConsole,初始化的时候就调用。

import ReactDOM from "react-dom/client";
import { I18nextProvider } from 'react-i18next';
import { attachConsole } from "tauri-plugin-log-api";
import i18n from '../src-tauri/locales/index';
import App from "./App";
attachConsole();
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
    <I18nextProvider i18n={i18n}>
      <App />
    </I18nextProvider>
);

我们在页面中调用就用下面的方式。

import {info} from "tauri-plugin-log-api";
const changeLangAction = async (lang: string) => {
    info('changeLangAction in render')
    setStore("lang", lang);
    setCurrentLang(lang);
    i18n.changeLanguage(lang);
    if (IS_TAURI) {
      invoke("change_menu_language", { lang }).then(() => {
        relaunch();
      });
    }
  };

设置日志级别
从上面的输出可以看到,由于所有的跟踪输出,输出内容相当多。通常,更适合只记录 info 级别及以上的日志。Tauri 日志器有一个 LevelFilter 机制来实现这一点。

在 main.rs 中,可以通过在插件构建器中添加 .level(LevelFilter::Info) 来过滤只显示 info 级别及以上的日志语句。

use log::LevelFilter;
 .plugin(
            tauri_plugin_log::Builder::default()
            .targets([LogTarget::LogDir, LogTarget::Stdout, LogTarget::Webview])
            .level(LevelFilter::Info)
            .build()
        )

这样配置之后,TRACE 语句会消失。

注意⚠️:仍然有可能在应用程序启动时看到一些 TRACE 日志,因为它们可能在 Logger 插件构建之前发生。

到这里,日志记录的功能就基本完成了。

结语

Tauri 应用程序配置日志记录是一个简单的过程,可以极大地提升开发体验。通过使用 log 和 tauri-plugin-log,可以轻松地将日志记录集成到您的 Rust 和 JavaScript 代码中,日志记录在客户端的开发中是必不可少的,有一个规范的日志记录能力可以提高整个程序的稳定性。

源码

https://github.com/Xutaotaotao/XTools/tree/feature-log

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
1
1
0
39
分享
相关文章
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
242 20
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
344 67
云上数据安全保护:敏感日志扫描与脱敏实践详解
随着企业对云服务的广泛应用,数据安全成为重要课题。通过对云上数据进行敏感数据扫描和保护,可以有效提升企业或组织的数据安全。本文主要基于阿里云的数据安全中心数据识别功能进行深入实践探索。通过对商品购买日志的模拟,分析了如何使用阿里云的工具对日志数据进行识别、脱敏(3 种模式)处理和基于 StoreView 的查询脱敏方式,从而在保障数据安全的同时满足业务需求。通过这些实践,企业可以有效降低数据泄漏风险,提升数据治理能力和系统安全性。
1324 197
云上数据安全保护:敏感日志扫描与脱敏实践详解
鸿蒙开发:console日志输出
针对初学者而言,大家只需要掌握住日志打印即可,等到了鸿蒙应用开发的时候,还有一个鸿蒙原生的打印工具HiLog,到时,我们也会详细的去讲述,也会针对HiLog,封装一个通用的工具类。
132 11
鸿蒙开发:console日志输出
除了实时性能监控,Hyper-V还支持日志记录和警报功能你知道吗?
Hyper-V不仅支持实时性能监控,还具备强大的日志记录和警报功能。通过事件查看器可访问详细的日志文件,涵盖虚拟机管理、配置及Hypervisor事件,帮助故障排查和性能分析。警报功能支持预定义和自定义规则,可通过多种方式通知管理员,确保及时响应问题,保障虚拟化环境的稳定运行。
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此使用 Apache Doris 替换 Elasticsearch,实现资源投入降低 50%、查询速度提升 2~4 倍,同时显著提高了运维效率。
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
251 64
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
629 44

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问