Skip to content

Commit 0f08cf1

Browse files
committed
add file logging
1 parent 150f76e commit 0f08cf1

File tree

4 files changed

+70
-20
lines changed

4 files changed

+70
-20
lines changed

Cargo.lock

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/tracing/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ specta-typescript = { workspace = true }
1717
tauri = { workspace = true, features = ["tray-icon", "image-png"] }
1818
tauri-specta = { workspace = true, features = ["derive", "typescript"] }
1919

20-
tauri-plugin-sentry = { workspace = true }
20+
tauri-plugin-sentry = { workspace = true, features = ["tracing"] }
2121

22+
dirs = { workspace = true }
2223
serde = { workspace = true, features = ["derive"] }
2324
serde_json = { workspace = true }
2425
specta = { workspace = true, features = ["derive"] }
2526
thiserror = { workspace = true }
2627

2728
tracing = { workspace = true }
29+
tracing-appender = { version = "0.2" }
2830
tracing-subscriber = { workspace = true, features = ["env-filter", "chrono"] }

plugins/tracing/src/lib.rs

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@ mod ext;
55
pub use errors::*;
66
pub use ext::*;
77

8+
use std::{fs, path::PathBuf};
9+
use tauri::Manager;
10+
11+
use tracing_appender::{non_blocking::WorkerGuard, rolling};
812
use tracing_subscriber::{
913
fmt, prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt, EnvFilter,
1014
};
1115

1216
const PLUGIN_NAME: &str = "tracing";
1317

14-
pub type ManagedState = std::sync::Mutex<State>;
15-
16-
#[derive(Default)]
17-
pub struct State {}
18-
1918
fn make_specta_builder() -> tauri_specta::Builder<tauri::Wry> {
2019
tauri_specta::Builder::<tauri::Wry>::new()
2120
.plugin_name(PLUGIN_NAME)
@@ -32,15 +31,25 @@ pub fn init() -> tauri::plugin::TauriPlugin<tauri::Wry> {
3231
.setup(move |app, _api| {
3332
specta_builder.mount_events(app);
3433

35-
{
36-
let env_filter = EnvFilter::try_from_default_env()
37-
.unwrap_or_else(|_| EnvFilter::new("info"))
38-
.add_directive("ort=warn".parse().unwrap());
34+
let env_filter = EnvFilter::try_from_default_env()
35+
.unwrap_or_else(|_| EnvFilter::new("info"))
36+
.add_directive("ort=warn".parse().unwrap());
37+
38+
let bundle_id = app.config().identifier.clone();
3939

40+
if let Some((file_writer, guard)) = make_file_writer_if_enabled(true, &bundle_id) {
4041
tracing_subscriber::Registry::default()
42+
.with(env_filter)
43+
.with(tauri_plugin_sentry::sentry::integrations::tracing::layer())
4144
.with(fmt::layer())
45+
.with(fmt::layer().with_ansi(false).with_writer(file_writer))
46+
.init();
47+
assert!(app.manage(guard));
48+
} else {
49+
tracing_subscriber::Registry::default()
4250
.with(env_filter)
4351
.with(tauri_plugin_sentry::sentry::integrations::tracing::layer())
52+
.with(fmt::layer())
4453
.init();
4554
}
4655

@@ -49,6 +58,29 @@ pub fn init() -> tauri::plugin::TauriPlugin<tauri::Wry> {
4958
.build()
5059
}
5160

61+
fn make_file_writer_if_enabled(
62+
enabled: bool,
63+
bundle_identifier: &str,
64+
) -> Option<(tracing_appender::non_blocking::NonBlocking, WorkerGuard)> {
65+
if !enabled {
66+
return None;
67+
}
68+
69+
let base_dir: PathBuf = match dirs::data_dir() {
70+
Some(p) => p,
71+
None => return None,
72+
};
73+
74+
let logs_dir = base_dir.join(bundle_identifier).join("logs");
75+
if let Err(_e) = fs::create_dir_all(&logs_dir) {
76+
return None;
77+
}
78+
79+
let file_appender = rolling::daily(&logs_dir, "log.txt");
80+
let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
81+
Some((non_blocking, guard))
82+
}
83+
5284
#[cfg(test)]
5385
mod test {
5486
use super::*;

plugins/tray/src/ext.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,24 +136,26 @@ impl<T: tauri::Manager<tauri::Wry>> TrayPluginExt<tauri::Wry> for T {
136136
let app_commit = app.get_git_hash();
137137
let app_backends = app.list_ggml_backends();
138138

139+
let backends_formatted = app_backends
140+
.iter()
141+
.map(|b| format!("{:?}", b))
142+
.collect::<Vec<_>>()
143+
.join("\n");
144+
139145
let message = format!(
140-
"{} v{}\n\nSHA: {}\n\nBackends: {}",
141-
app_name,
142-
app_version,
143-
app_commit,
144-
app_backends
145-
.iter()
146-
.map(|b| format!("{:?}", b))
147-
.collect::<Vec<_>>()
148-
.join("\n")
146+
"• App Name: {}\n• App Version: {}\n• SHA:\n {}\n• Backends:\n{}",
147+
app_name, app_version, app_commit, backends_formatted
149148
);
150149

151150
let app_clone = app.clone();
152151

153152
app.dialog()
154153
.message(&message)
155154
.title("About Hyprnote")
156-
.buttons(MessageDialogButtons::OkCustom("Copy".to_string()))
155+
.buttons(MessageDialogButtons::OkCancelCustom(
156+
"Copy".to_string(),
157+
"Cancel".to_string(),
158+
))
157159
.show(move |result| {
158160
if result {
159161
let _ = app_clone.clipboard().write_text(&message);

0 commit comments

Comments
 (0)