diff --git a/Cargo.lock b/Cargo.lock index 989abbb..a11284f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -420,6 +420,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -577,6 +586,7 @@ dependencies = [ "sha2", "tokio", "tracing", + "tracing-appender", "tracing-subscriber", "tracker", "uuid", @@ -2781,10 +2791,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", + "itoa", "num-conv", "powerfmt", "serde", "time-core", + "time-macros", ] [[package]] @@ -2793,6 +2805,16 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.7.6" @@ -2905,6 +2927,18 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.28" @@ -2937,6 +2971,16 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.19" @@ -2947,12 +2991,15 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 512e892..2e10d37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,5 +40,6 @@ sha2 = "0.10.8" tokio = { version = "1.39.3", features = ["process"] } notify-rust = "4.11.3" zbus = { version = "5.1.1", features = ["tokio"] } -tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } +tracing-subscriber = { version = "0.3.19", features = ["env-filter", "json"] } tracing = "0.1.41" +tracing-appender = "0.2.3" diff --git a/src/main.rs b/src/main.rs index 41494cf..bb72425 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ use file_builders::{ openvrpaths_vrpath::{get_current_openvrpaths, set_current_openvrpaths_to_steam}, }; use gettextrs::LocaleCategory; +use paths::get_logs_dir; use relm4::{ adw, gtk::{self, gdk, gio, glib, prelude::*}, @@ -13,7 +14,9 @@ use relm4::{ use std::env; use steam_linux_runtime_injector::restore_runtime_entrypoint; use tracing::warn; -use tracing_subscriber::{filter::LevelFilter, EnvFilter}; +use tracing_subscriber::{ + filter::LevelFilter, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer, +}; use ui::{ app::{App, AppInit, Msg}, cmdline_opts::CmdLineOpts, @@ -69,13 +72,22 @@ fn main() -> Result<()> { } restore_steam_xr_files(); - tracing_subscriber::fmt() - .with_env_filter( - EnvFilter::builder() - .with_default_directive(LevelFilter::INFO.into()) - .from_env_lossy(), + let rolling_log_writer = tracing_appender::rolling::daily(get_logs_dir(), "log"); + let (non_blocking_appender, _appender_guard) = + tracing_appender::non_blocking(rolling_log_writer); + tracing_subscriber::registry() + .with( + tracing_subscriber::fmt::layer().pretty().with_filter( + EnvFilter::builder() + .with_default_directive(LevelFilter::INFO.into()) + .from_env_lossy(), + ), + ) + .with( + tracing_subscriber::fmt::layer() + .json() + .with_writer(non_blocking_appender), ) - .pretty() .init(); // Prepare i18n diff --git a/src/paths.rs b/src/paths.rs index cc2d0eb..769c33c 100644 --- a/src/paths.rs +++ b/src/paths.rs @@ -56,6 +56,10 @@ pub fn get_cache_dir() -> PathBuf { XDG.get_cache_home().join(CMD_NAME) } +pub fn get_logs_dir() -> PathBuf { + get_cache_dir().join("logs") +} + pub fn get_backup_dir() -> PathBuf { let p = get_data_dir().join("backups"); if !p.is_dir() {