diff --git a/Cargo.lock b/Cargo.lock index a60e3f2c2..8e5290b3c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -806,8 +806,9 @@ dependencies = [ "netstack-lwip", "network-interface", "once_cell", - "opentelemetry 0.21.0", + "opentelemetry", "opentelemetry-jaeger", + "opentelemetry_sdk", "prost", "public-suffix", "rand", @@ -2537,16 +2538,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" -[[package]] -name = "opentelemetry" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54" -dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk 0.20.0", -] - [[package]] name = "opentelemetry" version = "0.21.0" @@ -2573,7 +2564,7 @@ dependencies = [ "bytes", "http", "hyper", - "opentelemetry 0.21.0", + "opentelemetry", "tokio", ] @@ -2589,10 +2580,10 @@ dependencies = [ "headers", "http", "hyper", - "opentelemetry 0.21.0", + "opentelemetry", "opentelemetry-http", "opentelemetry-semantic-conventions", - "opentelemetry_sdk 0.21.0", + "opentelemetry_sdk", "thrift", "tokio", ] @@ -2603,43 +2594,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5774f1ef1f982ef2a447f6ee04ec383981a3ab99c8e77a1a7b30182e65bbc84" dependencies = [ - "opentelemetry 0.21.0", -] - -[[package]] -name = "opentelemetry_api" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a81f725323db1b1206ca3da8bb19874bbd3f57c3bcd59471bfb04525b265b9b" -dependencies = [ - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror", - "urlencoding", -] - -[[package]] -name = "opentelemetry_sdk" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "once_cell", - "opentelemetry_api", - "ordered-float 3.9.1", - "percent-encoding", - "rand", - "regex", - "thiserror", + "opentelemetry", ] [[package]] @@ -2653,8 +2608,9 @@ dependencies = [ "futures-channel", "futures-executor", "futures-util", + "glob", "once_cell", - "opentelemetry 0.21.0", + "opentelemetry", "ordered-float 4.1.1", "percent-encoding", "rand", @@ -2672,15 +2628,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "ordered-float" -version = "3.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a54938017eacd63036332b4ae5c8a49fc8c0c1d6d629893057e4f13609edd06" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "4.1.1" @@ -4059,20 +4006,33 @@ dependencies = [ "tracing-core", ] +[[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-opentelemetry" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75327c6b667828ddc28f5e3f169036cb793c3f588d83bf0f262a7f062ffed3c8" +checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596" dependencies = [ + "js-sys", "once_cell", - "opentelemetry 0.20.0", - "opentelemetry_sdk 0.20.0", + "opentelemetry", + "opentelemetry_sdk", "smallvec", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", "tracing-subscriber", + "web-time", ] [[package]] @@ -4106,7 +4066,7 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.1.3", ] [[package]] @@ -4428,6 +4388,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57099a701fb3a8043f993e8228dc24229c7b942e2b009a1b962e54489ba1d3bf" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webpki-roots" version = "0.25.2" diff --git a/clash_lib/Cargo.toml b/clash_lib/Cargo.toml index 0a7e75acf..fb9651cd6 100644 --- a/clash_lib/Cargo.toml +++ b/clash_lib/Cargo.toml @@ -6,7 +6,7 @@ edition = { workspace = true } [features] default = ["shadowsocks"] -tracing = ["console-subscriber", "tracing-timing"] +tracing = [] bench = ["criterion"] [dependencies] @@ -45,7 +45,8 @@ once_cell = "1.18.0" # opentelemetry opentelemetry = "0.21" -tracing-opentelemetry = "0.21" +opentelemetry_sdk = "0.21" +tracing-opentelemetry = "0.22" opentelemetry-jaeger = { version = "0.20", features = ["collector_client", "hyper_collector_client", "rt-tokio"] } crc32fast = "1.3.2" @@ -96,8 +97,8 @@ maxminddb = "0.23.0" public-suffix = "0.1.0" murmur3 = "0.5.2" -console-subscriber = { version = "0.2.0", optional = true } -tracing-timing = { version = "0.6.0", optional = true } +console-subscriber = { version = "0.2.0" } +tracing-timing = { version = "0.6.0" } criterion = { version = "0.5", features = ["html_reports", "async_tokio"], optional = true } [dev-dependencies] diff --git a/clash_lib/src/app/logging.rs b/clash_lib/src/app/logging.rs index 711c587a7..1e7191af2 100644 --- a/clash_lib/src/app/logging.rs +++ b/clash_lib/src/app/logging.rs @@ -94,76 +94,73 @@ pub fn setup_logging( cwd: &str, log_file: Option, ) -> anyhow::Result> { - #[cfg(feature = "tracing")] - { - console_subscriber::init(); - Ok(None) - } - #[cfg(not(feature = "tracing"))] - { - let filter = EnvFilter::builder() - .with_default_directive( - format!("clash={}", level) - .parse::() - .unwrap() - .into(), - ) - .from_env_lossy(); - - let jaeger = if let Ok(jager_endpoint) = std::env::var("JAGER_ENDPOINT") { - global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new()); - - let tracer = opentelemetry_jaeger::new_collector_pipeline() - .with_service_name("clash-rs") - .with_endpoint(jager_endpoint) - .with_hyper() - .install_batch(opentelemetry::runtime::Tokio)?; - - Some(tracing_opentelemetry::layer().with_tracer(tracer)) - } else { - None - }; - - let ios_os_log = if cfg!(target_os = "ios") { - Some(OsLogger::new("com.watfaq.clash", "default")) - } else { - None - }; - - let (appender, g) = if let Some(log_file) = log_file { - let file_appender = tracing_appender::rolling::daily(cwd, log_file); - let (non_blocking, guard) = tracing_appender::non_blocking(file_appender); - (Some(non_blocking), Some(guard)) - } else { - (None, None) - }; - - let subscriber = tracing_subscriber::registry() - .with(jaeger) - .with(filter) - .with(collector) - .with( - tracing_subscriber::fmt::Layer::new() - .with_ansi(std::io::stdout().is_terminal()) - .pretty() - .with_file(true) - .with_line_number(true) - .with_writer(move || -> Box { - Box::new(W(appender.clone())) - }) - .with_writer(std::io::stdout), - ) - .with(ios_os_log); - - tracing::subscriber::set_global_default(subscriber) - .map_err(|x| anyhow!("setup logging error: {}", x))?; - - if let Ok(jager_endpiont) = std::env::var("JAGER_ENDPOINT") { - debug!("jager endpoint: {}", jager_endpiont); - } - - Ok(g) - } + let filter = EnvFilter::builder() + .with_default_directive( + format!("clash={}", level) + .parse::() + .unwrap() + .into(), + ) + .from_env_lossy(); + + let jaeger = if let Ok(jager_endpoint) = std::env::var("JAGER_ENDPOINT") { + global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new()); + + let tracer = opentelemetry_jaeger::new_collector_pipeline() + .with_service_name("clash-rs") + .with_endpoint(jager_endpoint) + .with_hyper() + .install_batch(opentelemetry_sdk::runtime::Tokio)?; + + Some(tracing_opentelemetry::layer().with_tracer(tracer)) + } else { + None + }; + + let ios_os_log = if cfg!(target_os = "ios") { + Some(OsLogger::new("com.watfaq.clash", "default")) + } else { + None + }; + + let (appender, g) = if let Some(log_file) = log_file { + let file_appender = tracing_appender::rolling::daily(cwd, log_file); + let (non_blocking, guard) = tracing_appender::non_blocking(file_appender); + (Some(non_blocking), Some(guard)) + } else { + (None, None) + }; + + let console_layer = if cfg!(feature = "tracing") { + Some(console_subscriber::spawn()) + } else { + None + }; + + let subscriber = tracing_subscriber::registry() + .with(jaeger) + .with(filter) + .with(collector) + .with(console_layer) + .with( + tracing_subscriber::fmt::Layer::new() + .with_ansi(std::io::stdout().is_terminal()) + .pretty() + .with_file(true) + .with_line_number(true) + .with_writer(move || -> Box { Box::new(W(appender.clone())) }) + .with_writer(std::io::stdout), + ) + .with(ios_os_log); + + tracing::subscriber::set_global_default(subscriber) + .map_err(|x| anyhow!("setup logging error: {}", x))?; + + if let Ok(jager_endpiont) = std::env::var("JAGER_ENDPOINT") { + debug!("jager endpoint: {}", jager_endpiont); + } + + Ok(g) } struct EventVisitor<'a>(&'a mut Vec);