From dbb80bb00836bdabfb1440139a958d169d44b792 Mon Sep 17 00:00:00 2001 From: Vladislav Nepogodin Date: Sat, 4 Jan 2025 21:16:51 +0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20logger:=20use=20tracing=20crate?= =?UTF-8?q?=20for=20logging=20spans?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 193 ++++++++++++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 3 + src/logger.rs | 35 +++++++++ src/main.rs | 17 ++--- src/pages.rs | 8 +-- 5 files changed, 239 insertions(+), 17 deletions(-) create mode 100644 src/logger.rs diff --git a/Cargo.lock b/Cargo.lock index 62d7f6d..1f47f78 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -264,6 +264,9 @@ dependencies = [ "serde", "serde_json", "subprocess", + "tracing", + "tracing-appender", + "tracing-subscriber", "unic-langid", ] @@ -483,6 +486,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" @@ -513,6 +525,15 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "digest" version = "0.10.7" @@ -1015,8 +1036,8 @@ dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -1614,6 +1635,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "memchr" version = "2.7.4" @@ -1700,6 +1730,22 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "objc" version = "0.2.7" @@ -1788,6 +1834,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "pacmanconf" version = "3.0.0" @@ -1911,6 +1963,12 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -2035,8 +2093,17 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -2047,9 +2114,15 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.5" @@ -2373,6 +2446,15 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -2590,6 +2672,47 @@ dependencies = [ "syn 2.0.90", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.7.6" @@ -2726,9 +2849,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", + "tracing-attributes", "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "tracing-core" version = "0.1.33" @@ -2736,6 +2883,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] @@ -2825,6 +3002,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index 448cb8b..0d14980 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,9 @@ reqwest = { version = "0.12", features = ["blocking", "json"] } unic-langid = "0.9" phf = { version = "0.11", features = ["macros"], default-features = false } chwd = { git = "https://github.com/CachyOS/chwd", rev = "3b288ba0d86b1d078057eb7f3d50b562959fd17a", version = "1.11.0" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +tracing-appender = "0.2" [build-dependencies] anyhow = "1" diff --git a/src/logger.rs b/src/logger.rs new file mode 100644 index 0000000..c55142b --- /dev/null +++ b/src/logger.rs @@ -0,0 +1,35 @@ +use crate::utils; + +use tracing_appender::non_blocking::WorkerGuard; +use tracing_subscriber::prelude::*; +use tracing_subscriber::EnvFilter; + +pub fn setup_logger() -> WorkerGuard { + // set log level from RUST_LOG env var + let env_filter = EnvFilter::try_from_default_env(); + + // create subscriber env filter + let subscriber_env_filter = + env_filter.unwrap_or_else(|_| EnvFilter::new("debug,i18n_embed=warn")); + + // create stdout layer + let stdout_log = tracing_subscriber::fmt::layer().compact().with_writer(std::io::stdout); + + // create just a file appender, without rolling + let file_appender = tracing_appender::rolling::never( + utils::fix_path("~/.config/cachyos/cachyos-hello"), + "cachyos-hello.log", + ); + + let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender); + let file_log = + tracing_subscriber::fmt::layer().compact().with_ansi(false).with_writer(non_blocking); + + tracing_subscriber::registry() + .with(file_log) + .with(stdout_log) + .with(subscriber_env_filter) + .init(); + + _guard +} diff --git a/src/main.rs b/src/main.rs index d20fb27..849620b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ mod data_types; mod embed_data; mod gresource; mod localization; +mod logger; mod pages; mod utils; @@ -30,6 +31,7 @@ use i18n_embed::DesktopLanguageRequester; use once_cell::sync::Lazy; use serde_json::json; use subprocess::Exec; +use tracing::{debug, error}; use unic_langid::LanguageIdentifier; const RESPREFIX: &str = "/org/cachyos/hello"; @@ -217,6 +219,9 @@ fn get_saved_json() -> serde_json::Value { } fn main() { + // Setup logger. + let _guard = logger::setup_logger(); + // Setup localization. let saved_locale = get_saved_locale().unwrap(); let requested_languages = if !saved_locale.is_empty() { @@ -228,7 +233,7 @@ fn main() { let localizer = crate::localization::localizer(); if let Err(error) = localizer.select(&requested_languages) { - eprintln!("Error while loading languages for library_fluent {}", error); + error!("Error while loading languages for library_fluent {error}"); } // Register UI. @@ -459,18 +464,14 @@ pub fn get_best_locale( /// Sets locale of ui and pages. fn set_locale(use_locale: &str) { if PROFILE == "Devel" { - println!( - "┌{0:─^40}┐\n│{1: ^40}│\n└{0:─^40}┘", - "", - format!("Locale changed to {use_locale}") - ); + debug!("┌{0:─^40}┐\n│{1: ^40}│\n└{0:─^40}┘", "", format!("Locale changed to {use_locale}")); } let localizer = crate::localization::localizer(); let req_locale: LanguageIdentifier = use_locale.parse().unwrap(); if let Err(error) = localizer.select(&[req_locale]) { - eprintln!("Error while loading languages for library_fluent {}", error); + error!("Error while loading languages for library_fluent {error}"); } G_SAVE_JSON.lock().unwrap()["locale"] = json!(use_locale); @@ -537,7 +538,7 @@ fn set_locale(use_locale: &str) { let stack: >k::Stack = &builder_ref.object("stack").unwrap(); let child = stack.child_by_name(&format!("{}page", &page_file_name)); if child.is_none() { - eprintln!("child not found"); + debug!("child not found"); continue; } let first_child = &child.unwrap().downcast::().unwrap().children(); diff --git a/src/pages.rs b/src/pages.rs index fad846f..289a996 100644 --- a/src/pages.rs +++ b/src/pages.rs @@ -9,14 +9,14 @@ use std::path::Path; use std::str; use std::sync::Mutex; +use gtk::prelude::*; + use glib::translate::FromGlib; use gtk::{glib, Builder}; use once_cell::sync::Lazy; use phf::phf_ordered_map; - -use gtk::prelude::*; - use subprocess::{Exec, Redirection}; +use tracing::{debug, info}; #[macro_export] macro_rules! create_gtk_button { @@ -1094,7 +1094,7 @@ fn on_appbtn_clicked(button: >k::Button) { }); rx.attach(None, move |text| { - println!("{text}"); + debug!("{text}"); glib::ControlFlow::Continue }); }