ログライブラリは公式のtauri-plugin-logを利用します。
まずはログを出力するまで
Rust側のログ出力
Rustに触るのがほぼ初めてなため知らなかったのですが、rustのlogというcrateは基本的にinterfaceのみの実装で、実際にログを出力するには好きなライブラリを合わせて使うようです。
# Cargo.toml
[dependencies]
log = "^0.4"
tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
あとはrust側のコードで初期化時に呼び出せばOK。
(今回とは直接関係ないですが別の呼び出しの都合でasync関数になってます)
# main.rs
use tauri_plugin_log::{LogTarget};
#[async_std::main]
async fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_log::Builder::default()
.targets([
LogTarget::LogDir,
LogTarget::Stdout,
LogTarget::Webview,
])
.build())
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while building tauri application");
}
ここまで出来れば後は任意のタイミングで
debug!(“hogehoge”);
などと呼び出してあげればOKです。
LogTargetで出力先を決めているため、WebView指定でブラウザ側で受け取ることもできます。
LogTarget::LogDirはwindowsの場合、
C\Users\{username}\AppData\Roaming\{identifier}\logs\{productname}.log
になります。
identifierはtauri.conf.jsonのtauri.bundle.identifierの値です。
productnameはtauri.conf.jsonのpackage.productNameの値です。
js側のログ出力
さて、無事にログが吐けることが確認できたと思います。
invoke_handler経由でrust側からログを吐くように作ってもいいのですが、そこを自前で実装するのは面倒なので、便利なnpmライブラリを利用しましょう。
プラグインのreadmeに書いてありますが、以下のライブラリをインストールします。
npm add https://github.com/tauri-apps/tauri-plugin-log#v1
これでjs側で簡単にログ出力ができます。
import {
attachConsole,
trace,
debug,
info,
warn,
error,
} from "tauri-plugin-log-api";
debug("hogehoge");
ドキュメントが詳しいので参考にしてください。
ログファイルの場所を変更する
さて、ここまでで最低限必要なことはできるようになりました。
ただし、今回はいわゆる既定のデータ領域以外にログを吐き出したいのでもう一工夫します。
#[cfg(windows)]
fn program_data_dir() -> PathBuf {
use std::env;
PathBuf::from(env::var("PROGRAMDATA").unwrap_or("/ProgramData".to_string()))
}
fn log_dir() -> PathBuf {
program_data_dir().join("hogehoge".to_string())
}
#[async_std::main]
async fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_log::Builder::default()
.targets([
LogTarget::Folder(log_dir().into()),
LogTarget::Stdout
])
.build())
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while building tauri application");
}
今回はC\ProgramData\hogehogeディレクトリに出力することにしました。
段階を踏んでいて冗長なのですが、まずProgramDataディレクトリを取得し”hogehoge”をjoinしています。そして、LogTargetにはFolderというパラメータがあり、ここにPathBufを渡すことで対象ディレクトリにログを出力できます。
つまり上記のコードの場合、
C\ProgramData\hogehoge\{identifier}.log
というファイルが出力されます。
余談
ログとは直接関係ないですが、@tauri-apps/api/fsを使ってjs側のコードから直接ファイル読み書きするのも手段の1つとして知っておくといいです。利用するには設定変更が必要ですが詳しくはググってください。
import {
readTextFile,
writeTextFile,
BaseDirectory,
} from "@tauri-apps/api/fs";
この中にBaseDirectoryという特定のディレクトリを指すEnumが内包されているため、例えばデスクトップのパスを指定したい場合などは
BaseDirectory.Desktop
などと指定することができます。
この方の記事が詳しいので気になったら参考にしてください。
コメント