Log プラグインでログファイルを出力する

Recipe ID: plugin-008

tauri-plugin-log を使用すると、Rust 側とフロントエンド側のログを一元管理し、設定したルールに従ってコンソールへの出力やログファイルへの保存を行うことができます。

1. モジュールのインストール

# プラグインの追加
npm run tauri add log

# Rust の log クレートの追加 (LevelFilter 等に必要)
cd src-tauri
cargo add log

2. Permissions (権限) の設定

src-tauri/capabilities/default.json に以下の権限を追加します。

{
    "permissions": [
        ...,
        "log:default"
    ]
}

3. Rust 側の設定

src-tauri/src/lib.rs でプラグインを初期化します。

use tauri_plugin_log::{Target, TargetKind};

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(
            tauri_plugin_log::Builder::new()
                .targets([
                    Target::new(TargetKind::Stdout), // 標準出力
                    Target::new(TargetKind::LogDir { file_name: None }), // ログファイル
                    Target::new(TargetKind::Webview), // Webview (Console)
                ])
                .level(log::LevelFilter::Debug) // ログレベル設定
                .build(),
        )
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

4. Rust 側でのログ出力

標準の log クレートを使用します。

use log::{info, warn, error};

#[tauri::command]
fn do_something() {
    info!("Rust 側で処理を開始しました");
    // ...
}

5. フロントエンド側でのログ出力

console.log をフックして Rust 側に転送するか、プラグインの API を直接呼び出します。

import { info, warn, error, attachConsole } from '@tauri-apps/plugin-log';

// Rust のログを Webview のコンソールにも表示する
const detach = await attachConsole();

// プラグイン経由で出力(これらはログファイルにも記録されます)
await info('フロントエンドからの情報ログ');
await error('エラーが発生しました');

// 不要になったらデタッチ
// detach();

6. ログファイルの場所

OS 標準のログディレクトリに保存されます。
- Windows: %APPDATA%\<bundle-identifier>\logs\
- macOS: ~/Library/Logs/<bundle-identifier>/
- Linux: $XDG_DATA_HOME/<bundle-identifier>/logs/