From 3583c6edd3d3a2e580496309f47bd6c630bdb3c0 Mon Sep 17 00:00:00 2001 From: Scott Opell Date: Sat, 30 Nov 2024 16:23:47 -0500 Subject: [PATCH 1/6] Adds json log output format --- .../src/tracing_subscriber_config_utils.rs | 60 ++++++++++++------- crates/rqbit/src/main.rs | 10 ++++ desktop/src-tauri/src/main.rs | 2 + 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/crates/librqbit/src/tracing_subscriber_config_utils.rs b/crates/librqbit/src/tracing_subscriber_config_utils.rs index e4856c254..f89aab180 100644 --- a/crates/librqbit/src/tracing_subscriber_config_utils.rs +++ b/crates/librqbit/src/tracing_subscriber_config_utils.rs @@ -53,6 +53,8 @@ pub struct InitLoggingOptions<'a> { pub default_rust_log_value: Option<&'a str>, pub log_file: Option<&'a str>, pub log_file_rust_log: Option<&'a str>, + pub log_file_json: bool, + pub log_json: bool, } pub struct InitLoggingResult { @@ -62,7 +64,7 @@ pub struct InitLoggingResult { #[inline(never)] pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result { - let stderr_filter = EnvFilter::builder() + let stdout_filter = EnvFilter::builder() .with_default_directive( opts.default_rust_log_value .unwrap_or("info") @@ -72,16 +74,23 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result anyhow::Result anyhow::Result(); spawn(error_span!("fmt_filter_reloader"), async move { while let Some(rust_log) = reload_rx.recv().await { - let stderr_env_filter = match EnvFilter::builder().parse(&rust_log) { + let stdout_env_filter = match EnvFilter::builder().parse(&rust_log) { Ok(f) => f, Err(e) => { eprintln!("can't parse env filter {:?}: {:#?}", rust_log, e); @@ -135,7 +155,7 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result anyhow::Result<()> }), log_file: opts.log_file.as_deref(), log_file_rust_log: Some(&opts.log_file_rust_log), + log_file_json: opts.log_file_json, + log_json: opts.log_json, })?; match librqbit::try_increase_nofile_limit() { diff --git a/desktop/src-tauri/src/main.rs b/desktop/src-tauri/src/main.rs index 3b215ca93..479347043 100644 --- a/desktop/src-tauri/src/main.rs +++ b/desktop/src-tauri/src/main.rs @@ -385,6 +385,8 @@ async fn start() { default_rust_log_value: Some("info"), log_file: None, log_file_rust_log: None, + log_file_json: false, + log_json: false, }) .unwrap(); From 3265d2c442fe9d960f7b4c07d1aa45f483ece0fc Mon Sep 17 00:00:00 2001 From: Scott Opell Date: Sun, 1 Dec 2024 17:32:55 -0500 Subject: [PATCH 2/6] Finally success? --- .../src/tracing_subscriber_config_utils.rs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/crates/librqbit/src/tracing_subscriber_config_utils.rs b/crates/librqbit/src/tracing_subscriber_config_utils.rs index f89aab180..5a128477b 100644 --- a/crates/librqbit/src/tracing_subscriber_config_utils.rs +++ b/crates/librqbit/src/tracing_subscriber_config_utils.rs @@ -4,7 +4,12 @@ use anyhow::Context; use bytes::Bytes; use librqbit_core::spawn_utils::spawn; use tracing::error_span; -use tracing_subscriber::fmt::MakeWriter; +use tracing_subscriber::Layer; +use tracing_subscriber::{ + fmt::{self, MakeWriter}, + prelude::*, + EnvFilter, +}; struct Subscriber { tx: tokio::sync::broadcast::Sender, @@ -64,7 +69,7 @@ pub struct InitLoggingResult { #[inline(never)] pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result { - let stdout_filter = EnvFilter::builder() + let initial_filter = EnvFilter::builder() .with_default_directive( opts.default_rust_log_value .unwrap_or("info") @@ -74,23 +79,19 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result + Send + Sync> = if opts.log_json + { + Box::new(fmt::layer().json()) + } else { + Box::new(fmt::layer()) + }; - use tracing_subscriber::{fmt, prelude::*, EnvFilter}; + let (filter_layer, reload_handle) = tracing_subscriber::reload::Layer::new(initial_filter); let (line_sub, line_broadcast) = Subscriber::new(); - // Stdout logging layer. - let (json, human) = if opts.log_json { - ( - Some(fmt::Layer::default().json().with_filter(stdout_filter)), - None, - ) - } else { - (None, Some(fmt::Layer::default().with_filter(stdout_filter))) - }; let layered = tracing_subscriber::registry() + .with(stdout_layer.with_filter(filter_layer)) // HTTP API log broadcast layer. .with( fmt::layer() @@ -100,7 +101,6 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result anyhow::Result Date: Sun, 1 Dec 2024 17:35:31 -0500 Subject: [PATCH 3/6] slightly simplify types and names --- crates/librqbit/src/tracing_subscriber_config_utils.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/librqbit/src/tracing_subscriber_config_utils.rs b/crates/librqbit/src/tracing_subscriber_config_utils.rs index 5a128477b..efcc6de34 100644 --- a/crates/librqbit/src/tracing_subscriber_config_utils.rs +++ b/crates/librqbit/src/tracing_subscriber_config_utils.rs @@ -69,7 +69,7 @@ pub struct InitLoggingResult { #[inline(never)] pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result { - let initial_filter = EnvFilter::builder() + let stdout_filter = EnvFilter::builder() .with_default_directive( opts.default_rust_log_value .unwrap_or("info") @@ -79,14 +79,13 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result + Send + Sync> = if opts.log_json - { + let stdout_layer: Box + Send + Sync> = if opts.log_json { Box::new(fmt::layer().json()) } else { Box::new(fmt::layer()) }; - let (filter_layer, reload_handle) = tracing_subscriber::reload::Layer::new(initial_filter); + let (filter_layer, reload_handle) = tracing_subscriber::reload::Layer::new(stdout_filter); let (line_sub, line_broadcast) = Subscriber::new(); From e2bd9fdba33900ce041c13352ecc92e2eef50cbd Mon Sep 17 00:00:00 2001 From: Scott Opell Date: Sun, 1 Dec 2024 17:41:19 -0500 Subject: [PATCH 4/6] Use dyn trick to remove code dup in log file path --- .../src/tracing_subscriber_config_utils.rs | 45 +++++++++---------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/crates/librqbit/src/tracing_subscriber_config_utils.rs b/crates/librqbit/src/tracing_subscriber_config_utils.rs index efcc6de34..3bd62d019 100644 --- a/crates/librqbit/src/tracing_subscriber_config_utils.rs +++ b/crates/librqbit/src/tracing_subscriber_config_utils.rs @@ -79,16 +79,15 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result + Send + Sync> = if opts.log_json { Box::new(fmt::layer().json()) } else { Box::new(fmt::layer()) }; - let (filter_layer, reload_handle) = tracing_subscriber::reload::Layer::new(stdout_filter); - - let (line_sub, line_broadcast) = Subscriber::new(); - let layered = tracing_subscriber::registry() .with(stdout_layer.with_filter(filter_layer)) // HTTP API log broadcast layer. @@ -118,27 +117,25 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result + Send + Sync> = if opts.log_json { + Box::new( + fmt::layer() + .json() + .with_writer(log_file) + .with_filter(log_env_filter), + ) } else { - layered - .with( - fmt::layer() - .with_ansi(false) - .with_writer(log_file) - .with_filter(log_env_filter), - ) - .try_init() - .context("can't init logging to file")?; - } + Box::new( + fmt::layer() + .json() + .with_writer(log_file) + .with_filter(log_env_filter), + ) + }; + layered + .with(log_layer) + .try_init() + .context("Can't init file logging")?; } else { layered.try_init().context("can't init logging")?; } From 4e9ca8eec96e3b92e0f6b52364460696bb72702d Mon Sep 17 00:00:00 2001 From: Scott Opell Date: Sun, 1 Dec 2024 17:44:21 -0500 Subject: [PATCH 5/6] extract http api layer out into var --- .../src/tracing_subscriber_config_utils.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/crates/librqbit/src/tracing_subscriber_config_utils.rs b/crates/librqbit/src/tracing_subscriber_config_utils.rs index 3bd62d019..2e47f4456 100644 --- a/crates/librqbit/src/tracing_subscriber_config_utils.rs +++ b/crates/librqbit/src/tracing_subscriber_config_utils.rs @@ -88,17 +88,17 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result Date: Sun, 1 Dec 2024 17:48:57 -0500 Subject: [PATCH 6/6] Fixes logic bugs introduced during copy-pasta --- crates/librqbit/src/tracing_subscriber_config_utils.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/librqbit/src/tracing_subscriber_config_utils.rs b/crates/librqbit/src/tracing_subscriber_config_utils.rs index 2e47f4456..f5244b285 100644 --- a/crates/librqbit/src/tracing_subscriber_config_utils.rs +++ b/crates/librqbit/src/tracing_subscriber_config_utils.rs @@ -117,7 +117,7 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result + Send + Sync> = if opts.log_json { + let log_layer: Box + Send + Sync> = if opts.log_file_json { Box::new( fmt::layer() .json() @@ -127,7 +127,6 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result