This is an automated email from the ASF dual-hosted git repository.

tison pushed a commit to branch reduce-tracing
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit e0552a4d08ada9b36345659b5f71f86a6149d8e6
Author: tison <[email protected]>
AuthorDate: Tue Jan 13 13:40:34 2026 +0800

    chore: reduce tracing deps
    
    Signed-off-by: tison <[email protected]>
---
 core/Cargo.lock                                    | 11 +++---
 core/Cargo.toml                                    |  8 ++--
 core/benches/vs_s3/Cargo.toml                      |  2 +-
 core/core/Cargo.toml                               |  5 +--
 core/core/src/types/context/write.rs               | 45 ++++++++--------------
 .../Cargo.toml                                     |  2 +-
 .../src/main.rs                                    | 23 ++++++-----
 core/fuzz/Cargo.toml                               |  2 +-
 core/layers/immutable-index/Cargo.toml             |  5 +--
 core/layers/immutable-index/src/lib.rs             | 23 ++++++++---
 core/layers/retry/Cargo.toml                       |  5 +--
 core/layers/retry/src/lib.rs                       | 33 +++++++++-------
 core/services/s3/Cargo.toml                        |  1 -
 core/services/s3/src/backend.rs                    |  2 -
 core/tests/behavior/main.rs                        | 14 ++++---
 15 files changed, 87 insertions(+), 94 deletions(-)

diff --git a/core/Cargo.lock b/core/Cargo.lock
index 7e6f78bcf..bd9e70adf 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -2784,9 +2784,9 @@ dependencies = [
 name = "edge_test_aws_s3_assume_role_with_web_identity"
 version = "0.55.0"
 dependencies = [
+ "logforth",
  "opendal",
  "tokio",
- "tracing-subscriber",
  "uuid",
 ]
 
@@ -5886,6 +5886,7 @@ dependencies = [
  "http 1.4.0",
  "libtest-mimic",
  "log",
+ "logforth",
  "opendal-core",
  "opendal-layer-async-backtrace",
  "opendal-layer-await-tree",
@@ -5979,7 +5980,6 @@ dependencies = [
  "sha2",
  "size",
  "tokio",
- "tracing-subscriber",
  "uuid",
 ]
 
@@ -6021,6 +6021,7 @@ dependencies = [
  "http-body 1.0.1",
  "jiff",
  "log",
+ "logforth",
  "md-5",
  "mea 0.6.0",
  "moka",
@@ -6033,7 +6034,6 @@ dependencies = [
  "serde_json",
  "sha2",
  "tokio",
- "tracing-subscriber",
  "url",
  "uuid",
  "web-time",
@@ -6181,9 +6181,9 @@ version = "0.55.0"
 dependencies = [
  "futures",
  "log",
+ "logforth",
  "opendal-core",
  "tokio",
- "tracing-subscriber",
 ]
 
 [[package]]
@@ -6269,11 +6269,11 @@ dependencies = [
  "bytes",
  "futures",
  "log",
+ "logforth",
  "opendal-core",
  "opendal-layer-logging",
  "opendal-layer-timeout",
  "tokio",
- "tracing-subscriber",
 ]
 
 [[package]]
@@ -6971,7 +6971,6 @@ dependencies = [
  "serde",
  "serde_json",
  "tokio",
- "tracing-subscriber",
 ]
 
 [[package]]
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 57bdccf5b..9dbbc0c7a 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -46,7 +46,8 @@ bytes = "1.10"
 ctor = "0.6"
 futures = { version = "0.3", default-features = false }
 http = "1.1"
-log = "0.4"
+log = { version = "0.4.29" }
+logforth = { version = "0.29.1", features = ["starter-log"] }
 mea = "0.6"
 quick-xml = { version = "0.38", default-features = false }
 rand = "0.8"
@@ -306,13 +307,10 @@ futures = { workspace = true, default-features = true }
 http = { workspace = true }
 libtest-mimic = "0.8"
 log = { workspace = true }
+logforth = { workspace = true }
 rand = { workspace = true }
 reqwest = "0.12.24"
 sha2 = { workspace = true }
 size = "0.5"
 tokio = { workspace = true, features = ["fs", "macros", "rt-multi-thread"] }
-tracing-subscriber = { version = "0.3", features = [
-  "env-filter",
-  "tracing-log",
-] }
 uuid = { workspace = true, features = ["serde", "v4"] }
diff --git a/core/benches/vs_s3/Cargo.toml b/core/benches/vs_s3/Cargo.toml
index 1912d005c..e83857794 100644
--- a/core/benches/vs_s3/Cargo.toml
+++ b/core/benches/vs_s3/Cargo.toml
@@ -32,7 +32,7 @@ aws-credential-types = { version = "1.2.8", features = [
 aws-sdk-s3 = "1.91.0"
 criterion = { version = "0.7", features = ["async", "async_tokio"] }
 dotenvy = "0.15"
-logforth = { version = "0.29.1", features = ["starter-log"] }
+logforth = { workspace = true }
 opendal = { path = "../..", features = ["tests"] }
 rand = { workspace = true }
 tokio = { workspace = true, features = ["full"] }
diff --git a/core/core/Cargo.toml b/core/core/Cargo.toml
index f16a45efb..c97c8eea2 100644
--- a/core/core/Cargo.toml
+++ b/core/core/Cargo.toml
@@ -94,11 +94,8 @@ uuid = { workspace = true, features = ["serde", "v4", "js"] }
 web-time = { version = "1.1.0" }
 
 [dev-dependencies]
+logforth = { workspace = true }
 pretty_assertions = "1"
 rand = { workspace = true }
 sha2 = { workspace = true }
 tokio = { workspace = true, features = ["fs", "macros", "rt-multi-thread"] }
-tracing-subscriber = { version = "0.3", features = [
-  "env-filter",
-  "tracing-log",
-] }
diff --git a/core/core/src/types/context/write.rs 
b/core/core/src/types/context/write.rs
index 11a8551dd..a880f3872 100644
--- a/core/core/src/types/context/write.rs
+++ b/core/core/src/types/context/write.rs
@@ -248,13 +248,18 @@ mod tests {
         }
     }
 
+    fn setup() {
+        let _ = logforth::starter_log::builder()
+            .dispatch(|d| {
+                d.filter(EnvFilterBuilder::from_default_env().build())
+                    
.append(Testing::default().with_layout(TextLayout::default()))
+            })
+            .try_apply();
+    }
+
     #[tokio::test]
     async fn test_exact_buf_writer_short_write() -> Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .pretty()
-            .with_test_writer()
-            .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-            .try_init();
+        setup();
 
         let mut rng = thread_rng();
         let mut expected = vec![0; 5];
@@ -289,11 +294,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_inexact_buf_writer_large_write() -> Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .pretty()
-            .with_test_writer()
-            .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-            .try_init();
+        setup();
 
         let buf = Arc::new(Mutex::new(vec![]));
         let mut w = WriteGenerator::new(
@@ -327,11 +328,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_inexact_buf_writer_combine_small() -> Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .pretty()
-            .with_test_writer()
-            .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-            .try_init();
+        setup();
 
         let buf = Arc::new(Mutex::new(vec![]));
         let mut w = WriteGenerator::new(
@@ -377,11 +374,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_inexact_buf_writer_queue_remaining() -> Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .pretty()
-            .with_test_writer()
-            .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-            .try_init();
+        setup();
 
         let buf = Arc::new(Mutex::new(vec![]));
         let mut w = WriteGenerator::new(
@@ -429,11 +422,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_fuzz_exact_buf_writer() -> Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .pretty()
-            .with_test_writer()
-            .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-            .try_init();
+        setup();
 
         let mut rng = thread_rng();
         let mut expected = vec![];
@@ -482,11 +471,7 @@ mod tests {
     /// everything at once.
     #[tokio::test]
     async fn test_exact_buf_writer_large_buffer_splits_into_chunks() -> 
Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .pretty()
-            .with_test_writer()
-            .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-            .try_init();
+        setup();
 
         let chunk_size = 10;
         let large_buffer_size = 25; // 2.5x chunk_size
diff --git a/core/edge/s3_aws_assume_role_with_web_identity/Cargo.toml 
b/core/edge/s3_aws_assume_role_with_web_identity/Cargo.toml
index a9f6a9702..d90a2520d 100644
--- a/core/edge/s3_aws_assume_role_with_web_identity/Cargo.toml
+++ b/core/edge/s3_aws_assume_role_with_web_identity/Cargo.toml
@@ -25,7 +25,7 @@ rust-version.workspace = true
 version.workspace = true
 
 [dependencies]
+logforth = { workspace = true }
 opendal = { path = "../..", features = ["tests", "services-s3"] }
 tokio = { workspace = true, features = ["full"] }
-tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
 uuid = { workspace = true, features = ["serde", "v4"] }
diff --git a/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs 
b/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs
index 0a0982583..d0c37b04f 100644
--- a/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs
+++ b/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs
@@ -15,18 +15,23 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use opendal::Result;
+use logforth::append::Testing;
+use logforth::filter::env_filter::EnvFilterBuilder;
+use logforth::layout::TextLayout;
 use opendal::tests::init_test_service;
 
 #[tokio::main]
-async fn main() -> Result<()> {
-    let _ = tracing_subscriber::fmt()
-        .pretty()
-        .with_test_writer()
-        .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-        .try_init();
+async fn main() {
+    let _ = logforth::starter_log::builder()
+        .dispatch(|d| {
+            d.filter(EnvFilterBuilder::from_default_env().build())
+                .append(Testing::default().with_layout(TextLayout::default()))
+        })
+        .apply();
 
-    let op = init_test_service()?.expect("service must be init");
+    let op = init_test_service()
+        .unwrap_or_else(|err| panic!("failed to init test service: {:?}", err))
+        .expect("service must be init");
     assert_eq!(op.info().scheme(), opendal::services::S3_SCHEME);
 
     let result = op
@@ -34,6 +39,4 @@ async fn main() -> Result<()> {
         .await
         .expect("this operation should never return error");
     assert!(!result, "the file must be not exist");
-
-    Ok(())
 }
diff --git a/core/fuzz/Cargo.toml b/core/fuzz/Cargo.toml
index fd353dcd8..46fdfddc0 100644
--- a/core/fuzz/Cargo.toml
+++ b/core/fuzz/Cargo.toml
@@ -83,7 +83,7 @@ services-webhdfs = ["opendal/services-webhdfs"]
 arbitrary = { version = "1.4.2", features = ["derive"] }
 libfuzzer-sys = "0.4"
 log = { workspace = true }
-logforth = { version = "0.29.1", features = ["starter-log"] }
+logforth = { workspace = true }
 opendal = { path = "..", features = ["tests"] }
 uuid = { workspace = true, features = ["v4"] }
 
diff --git a/core/layers/immutable-index/Cargo.toml 
b/core/layers/immutable-index/Cargo.toml
index c3067d369..5b359c3c7 100644
--- a/core/layers/immutable-index/Cargo.toml
+++ b/core/layers/immutable-index/Cargo.toml
@@ -36,9 +36,6 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
 [dev-dependencies]
 futures = { workspace = true }
 log = { workspace = true }
+logforth = { workspace = true }
 opendal-core = { path = "../../core", version = "0.55.0" }
 tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
-tracing-subscriber = { version = "0.3", features = [
-  "env-filter",
-  "tracing-log",
-] }
diff --git a/core/layers/immutable-index/src/lib.rs 
b/core/layers/immutable-index/src/lib.rs
index aae2df6fe..6b633b40f 100644
--- a/core/layers/immutable-index/src/lib.rs
+++ b/core/layers/immutable-index/src/lib.rs
@@ -228,10 +228,12 @@ mod tests {
     use std::collections::HashMap;
     use std::sync::Arc;
 
+    use super::*;
     use futures::TryStreamExt;
     use log::debug;
-
-    use super::*;
+    use logforth::append::Testing;
+    use logforth::filter::env_filter::EnvFilterBuilder;
+    use logforth::layout::TextLayout;
 
     #[derive(Debug)]
     struct MockService;
@@ -253,9 +255,18 @@ mod tests {
         Operator::from_inner(Arc::new(MockService)).layer(layer)
     }
 
+    fn setup() {
+        let _ = logforth::starter_log::builder()
+            .dispatch(|d| {
+                d.filter(EnvFilterBuilder::from_default_env().build())
+                    
.append(Testing::default().with_layout(TextLayout::default()))
+            })
+            .try_apply();
+    }
+
     #[tokio::test]
     async fn test_list() -> Result<()> {
-        let _ = tracing_subscriber::fmt().with_test_writer().try_init();
+        setup();
 
         let mut iil = ImmutableIndexLayer::default();
         for i in ["file", "dir/", "dir/file", "dir_without_prefix/file"] {
@@ -285,7 +296,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_scan() -> Result<()> {
-        let _ = tracing_subscriber::fmt().with_test_writer().try_init();
+        setup();
 
         let mut iil = ImmutableIndexLayer::default();
         for i in ["file", "dir/", "dir/file", "dir_without_prefix/file"] {
@@ -317,7 +328,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_list_dir() -> Result<()> {
-        let _ = tracing_subscriber::fmt().with_test_writer().try_init();
+        setup();
 
         let mut iil = ImmutableIndexLayer::default();
         for i in [
@@ -367,7 +378,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_walk_top_down_dir() -> Result<()> {
-        let _ = tracing_subscriber::fmt().with_test_writer().try_init();
+        setup();
 
         let mut iil = ImmutableIndexLayer::default();
         for i in [
diff --git a/core/layers/retry/Cargo.toml b/core/layers/retry/Cargo.toml
index dffaafade..dee0274ed 100644
--- a/core/layers/retry/Cargo.toml
+++ b/core/layers/retry/Cargo.toml
@@ -38,11 +38,8 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
 [dev-dependencies]
 bytes = { workspace = true }
 futures = { workspace = true }
+logforth = { workspace = true }
 opendal-core = { path = "../../core", version = "0.55.0" }
 opendal-layer-logging = { path = "../logging", version = "0.55.0" }
 opendal-layer-timeout = { path = "../timeout", version = "0.55.0" }
 tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
-tracing-subscriber = { version = "0.3", features = [
-  "env-filter",
-  "tracing-log",
-] }
diff --git a/core/layers/retry/src/lib.rs b/core/layers/retry/src/lib.rs
index 4ffeafc2f..edca6fb29 100644
--- a/core/layers/retry/src/lib.rs
+++ b/core/layers/retry/src/lib.rs
@@ -25,7 +25,6 @@ use std::sync::Arc;
 
 use backon::ExponentialBuilder;
 use backon::Retryable;
-use log::warn;
 use opendal_core::raw::*;
 use opendal_core::*;
 
@@ -255,10 +254,11 @@ pub struct DefaultRetryInterceptor;
 
 impl RetryInterceptor for DefaultRetryInterceptor {
     fn intercept(&self, err: &Error, dur: Duration) {
-        warn!(
+        log::warn!(
             target: "opendal::layers::retry",
             "will retry after {}s because: {}",
-            dur.as_secs_f64(), err)
+            dur.as_secs_f64(), err
+        );
     }
 }
 
@@ -613,8 +613,10 @@ mod tests {
     use bytes::Bytes;
     use futures::TryStreamExt;
     use futures::stream;
+    use logforth::append::Testing;
+    use logforth::filter::env_filter::EnvFilterBuilder;
+    use logforth::layout::TextLayout;
     use opendal_layer_logging::LoggingLayer;
-    use tracing_subscriber::filter::LevelFilter;
 
     use super::*;
 
@@ -835,12 +837,18 @@ mod tests {
         }
     }
 
+    fn setup() {
+        let _ = logforth::starter_log::builder()
+            .dispatch(|d| {
+                d.filter(EnvFilterBuilder::from_default_env().build())
+                    
.append(Testing::default().with_layout(TextLayout::default()))
+            })
+            .try_apply();
+    }
+
     #[tokio::test]
     async fn test_retry_read() -> Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .with_max_level(LevelFilter::TRACE)
-            .with_test_writer()
-            .try_init();
+        setup();
 
         let builder = MockBuilder::default();
         let op = Operator::new(builder.clone())?
@@ -864,10 +872,7 @@ mod tests {
     /// This test is used to reproduce the panic issue while composing retry 
layer with timeout layer.
     #[tokio::test]
     async fn test_retry_write_fail_on_close() -> Result<()> {
-        let _ = tracing_subscriber::fmt()
-            .with_max_level(LevelFilter::TRACE)
-            .with_test_writer()
-            .try_init();
+        setup();
 
         let builder = MockBuilder::default();
         let op = Operator::new(builder.clone())?
@@ -896,7 +901,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_retry_list() -> Result<()> {
-        let _ = tracing_subscriber::fmt().with_test_writer().try_init();
+        setup();
 
         let builder = MockBuilder::default();
         let op = Operator::new(builder.clone())?
@@ -920,7 +925,7 @@ mod tests {
 
     #[tokio::test]
     async fn test_retry_batch() -> Result<()> {
-        let _ = tracing_subscriber::fmt().with_test_writer().try_init();
+        setup();
 
         let builder = MockBuilder::default();
         // set to a lower delay to make it run faster
diff --git a/core/services/s3/Cargo.toml b/core/services/s3/Cargo.toml
index f13928ab1..87bae334a 100644
--- a/core/services/s3/Cargo.toml
+++ b/core/services/s3/Cargo.toml
@@ -52,4 +52,3 @@ serde = { workspace = true, features = ["derive"] }
 pretty_assertions = "1"
 serde_json = { workspace = true }
 tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
-tracing-subscriber = "0.3"
diff --git a/core/services/s3/src/backend.rs b/core/services/s3/src/backend.rs
index 99456d94d..d3ae6aa76 100644
--- a/core/services/s3/src/backend.rs
+++ b/core/services/s3/src/backend.rs
@@ -1146,8 +1146,6 @@ mod tests {
 
     #[test]
     fn test_build_endpoint() {
-        let _ = tracing_subscriber::fmt().with_test_writer().try_init();
-
         let endpoint_cases = vec![
             Some("s3.amazonaws.com"),
             Some("https://s3.amazonaws.com";),
diff --git a/core/tests/behavior/main.rs b/core/tests/behavior/main.rs
index fd31fa2dc..59790622f 100644
--- a/core/tests/behavior/main.rs
+++ b/core/tests/behavior/main.rs
@@ -34,6 +34,9 @@ mod async_write;
 // External dependencies
 use libtest_mimic::Arguments;
 use libtest_mimic::Trial;
+use logforth::append::Testing;
+use logforth::filter::env_filter::EnvFilterBuilder;
+use logforth::layout::TextLayout;
 use opendal::tests::TEST_RUNTIME;
 use opendal::tests::init_test_service;
 use opendal::*;
@@ -63,11 +66,12 @@ fn main() -> anyhow::Result<()> {
 
     // Don't init logging while building operator which may break cargo
     // nextest output
-    let _ = tracing_subscriber::fmt()
-        .pretty()
-        .with_test_writer()
-        .with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
-        .try_init();
+    let _ = logforth::starter_log::builder()
+        .dispatch(|d| {
+            d.filter(EnvFilterBuilder::from_default_env().build())
+                .append(Testing::default().with_layout(TextLayout::default()))
+        })
+        .try_apply();
 
     let conclusion = libtest_mimic::run(&args, tests);
 

Reply via email to