From bfdafa4a2a98d6c358a31f215d3f3afdf918790d Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sat, 25 Oct 2025 09:46:04 -0700 Subject: [PATCH 1/7] feat(log): Allow setting a log formatter per target --- plugins/log/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs index c0642d417..e71dc6cb7 100644 --- a/plugins/log/src/lib.rs +++ b/plugins/log/src/lib.rs @@ -186,6 +186,7 @@ pub enum TargetKind { pub struct Target { kind: TargetKind, filters: Vec>, + formatter: Option>, } impl Target { @@ -194,6 +195,7 @@ impl Target { Self { kind, filters: Vec::new(), + formatter: None, } } @@ -205,6 +207,15 @@ impl Target { self.filters.push(Box::new(filter)); self } + + #[inline] + pub fn format(mut self, formatter: F) -> Self + where + F: Fn(FormatCallback, &Arguments, &Record) + Send + Sync + 'static, + { + self.formatter.replace(Box::new(formatter)); + self + } } pub struct Builder { @@ -384,6 +395,9 @@ impl Builder { for filter in target.filters { target_dispatch = target_dispatch.filter(filter); } + if let Some(formatter) = target.formatter { + target_dispatch = target_dispatch.format(formatter); + } let logger = match target.kind { #[cfg(target_os = "android")] From 1984b66c82c298eb4ad914089ebb40dc015d0e5a Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sat, 25 Oct 2025 10:03:19 -0700 Subject: [PATCH 2/7] Add change file --- .changes/allow-log-formatter-per-target.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changes/allow-log-formatter-per-target.md diff --git a/.changes/allow-log-formatter-per-target.md b/.changes/allow-log-formatter-per-target.md new file mode 100644 index 000000000..8d2209a43 --- /dev/null +++ b/.changes/allow-log-formatter-per-target.md @@ -0,0 +1,5 @@ +--- +"log": "patch:enhance" +--- + +Allow specifying a log formatter per target using the `format` method on `Target`. From 13334d20964bffe3db3637b1609e639501ead6e0 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sun, 26 Oct 2025 07:46:13 -0700 Subject: [PATCH 3/7] Include log-js in changes --- .changes/allow-log-formatter-per-target.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changes/allow-log-formatter-per-target.md b/.changes/allow-log-formatter-per-target.md index 8d2209a43..cfe37e85b 100644 --- a/.changes/allow-log-formatter-per-target.md +++ b/.changes/allow-log-formatter-per-target.md @@ -1,5 +1,6 @@ --- "log": "patch:enhance" +"log-js": "patch:enhance" --- Allow specifying a log formatter per target using the `format` method on `Target`. From efbc08b613d3c83de91a6269ce10afaa4f3b7f69 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sun, 26 Oct 2025 07:46:25 -0700 Subject: [PATCH 4/7] Extract Formatter type to make Clippy happy --- plugins/log/src/lib.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs index e71dc6cb7..904a9d979 100644 --- a/plugins/log/src/lib.rs +++ b/plugins/log/src/lib.rs @@ -182,11 +182,13 @@ pub enum TargetKind { Dispatch(fern::Dispatch), } +type Formatter = dyn Fn(FormatCallback, &Arguments, &Record) + Send + Sync + 'static; + /// A log target. pub struct Target { kind: TargetKind, filters: Vec>, - formatter: Option>, + formatter: Option>, } impl Target { From b5a108c41516f34122a6420e84b6b2d424d05eca Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sun, 26 Oct 2025 07:52:42 -0700 Subject: [PATCH 5/7] Add clear_format method to Builder --- plugins/log/src/lib.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs index 904a9d979..89e092b86 100644 --- a/plugins/log/src/lib.rs +++ b/plugins/log/src/lib.rs @@ -289,6 +289,13 @@ impl Builder { self } + pub fn clear_format(mut self) -> Self { + self.dispatch = self.dispatch.format(|out, message, _record| { + out.finish(format_args!("{message}")); + }); + self + } + pub fn format(mut self, formatter: F) -> Self where F: Fn(FormatCallback, &Arguments, &Record) + Sync + Send + 'static, From 6060bd7cc5aa2c8a638b30394ea67b11faf28f65 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sun, 26 Oct 2025 10:38:24 -0700 Subject: [PATCH 6/7] Update allow-log-formatter-per-target.md --- .changes/allow-log-formatter-per-target.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changes/allow-log-formatter-per-target.md b/.changes/allow-log-formatter-per-target.md index cfe37e85b..7a9b7f40f 100644 --- a/.changes/allow-log-formatter-per-target.md +++ b/.changes/allow-log-formatter-per-target.md @@ -1,6 +1,6 @@ --- "log": "patch:enhance" -"log-js": "patch:enhance" +"log-js": "patch" --- Allow specifying a log formatter per target using the `format` method on `Target`. From 7d4338ffaf80e49cb6e5edf990dc57dd64b4d608 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Mon, 27 Oct 2025 09:41:56 -0700 Subject: [PATCH 7/7] Update bump types for log and log-js Co-authored-by: Fabian-Lars --- .changes/allow-log-formatter-per-target.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changes/allow-log-formatter-per-target.md b/.changes/allow-log-formatter-per-target.md index 7a9b7f40f..f92f4d262 100644 --- a/.changes/allow-log-formatter-per-target.md +++ b/.changes/allow-log-formatter-per-target.md @@ -1,6 +1,6 @@ --- -"log": "patch:enhance" -"log-js": "patch" +"log": "minor" +"log-js": "minor" --- Allow specifying a log formatter per target using the `format` method on `Target`.