diff --git a/crates/arti/src/logging.rs b/crates/arti/src/logging.rs
index d58a440d510a05da1508fa94075927095a6cb3be..6ba71da32c4abdba271f523d7e9e5ba533c0398a 100644
--- a/crates/arti/src/logging.rs
+++ b/crates/arti/src/logging.rs
@@ -111,11 +111,10 @@ fn filt_from_str_verbose(s: &str, source: &str) -> Result<Targets> {
 /// As filt_from_str_verbose, but treat an absent filter (or an empty string) as
 /// None.
 fn filt_from_opt_str(s: &Option<String>, source: &str) -> Result<Option<Targets>> {
-    let s = match s {
-        Some(ref s) if !s.is_empty() => Some(s.as_str()),
+    Ok(match s {
+        Some(s) if !s.is_empty() => Some(filt_from_str_verbose(s, source)?),
         _ => None,
-    };
-    s.map(|s| filt_from_str_verbose(s, source)).transpose()
+    })
 }
 
 /// Try to construct a tracing [`Layer`] for logging to stdout.