From 6e8906a3fa690b011f0cc4da28acf6a2becce2f1 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Thu, 16 May 2024 19:58:00 +0200 Subject: [PATCH] switch logging to tracing ecosystem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This switches: - from android_logger to tracing-android - from oslog to tracing-oslog - from log to the default tracing log infrastructure Most of the noise in here is changing the imports from `log::{…}` to `tracing::{…}`. In terms of log setup, for now this tries to stick with the existing behaviour: - myceliumd now uses `EnvFilter` and the `compact()` default formatter, instead of `prety_env_logger`. Its CLI args are kept as-is. `RUST_LOG` env var still works, too. - The `setup_the_logger` function in the `mobile` crate is renamed to `setup_logging`. --- Cargo.lock | 336 ++++++++++++++++++++++------ mobile/Cargo.toml | 7 +- mobile/src/lib.rs | 26 ++- mycelium/Cargo.toml | 3 +- mycelium/src/babel.rs | 2 +- mycelium/src/babel/hello.rs | 2 +- mycelium/src/babel/ihu.rs | 2 +- mycelium/src/babel/route_request.rs | 2 +- mycelium/src/babel/seqno_request.rs | 2 +- mycelium/src/babel/update.rs | 2 +- mycelium/src/data.rs | 4 +- mycelium/src/lib.rs | 2 +- mycelium/src/message.rs | 2 +- mycelium/src/peer.rs | 2 +- mycelium/src/peer_manager.rs | 2 +- mycelium/src/router.rs | 2 +- mycelium/src/routing_table.rs | 2 +- mycelium/src/source_table.rs | 2 +- mycelium/src/tun/android.rs | 2 +- mycelium/src/tun/darwin.rs | 2 +- mycelium/src/tun/ios.rs | 2 +- mycelium/src/tun/linux.rs | 2 +- mycelium/src/tun/windows.rs | 2 +- myceliumd/Cargo.toml | 4 +- myceliumd/src/api.rs | 2 +- myceliumd/src/api/message.rs | 2 +- myceliumd/src/cli/message.rs | 2 +- myceliumd/src/main.rs | 33 ++- myceliumd/src/metrics.rs | 2 +- 29 files changed, 334 insertions(+), 123 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1588e46..011b300 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -63,20 +63,17 @@ dependencies = [ [[package]] name = "android_log-sys" -version = "0.3.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" +checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" [[package]] -name = "android_logger" -version = "0.13.3" +name = "ansi_term" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "android_log-sys", - "env_logger", - "log", - "once_cell", + "winapi", ] [[package]] @@ -156,6 +153,17 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -242,6 +250,29 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bindgen" +version = "0.59.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "clap 2.34.0", + "env_logger", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -314,6 +345,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -336,6 +376,32 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map", +] + [[package]] name = "clap" version = "4.5.4" @@ -355,7 +421,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -460,19 +526,6 @@ dependencies = [ "syn 2.0.48", ] -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "deranged" version = "0.3.11" @@ -494,13 +547,19 @@ dependencies = [ ] [[package]] -name = "env_logger" -version = "0.10.2" +name = "either" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ + "atty", "humantime", - "is-terminal", "log", "regex", "termcolor", @@ -715,6 +774,12 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + [[package]] name = "h2" version = "0.4.4" @@ -746,6 +811,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.4" @@ -758,6 +832,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "http" version = "1.1.0" @@ -880,6 +963,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + [[package]] name = "ioctl-sys" version = "0.8.0" @@ -898,17 +990,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" -[[package]] -name = "is-terminal" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" -dependencies = [ - "hermit-abi", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "itoa" version = "1.0.10" @@ -930,6 +1011,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "left-right" version = "0.11.5" @@ -1033,6 +1120,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.1" @@ -1057,12 +1150,13 @@ dependencies = [ name = "mobile" version = "0.1.0" dependencies = [ - "android_logger", - "log", "mycelium", "once_cell", - "oslog", "tokio", + "tracing", + "tracing-android", + "tracing-oslog", + "tracing-subscriber", ] [[package]] @@ -1079,7 +1173,6 @@ dependencies = [ "ipnet", "left-right", "libc", - "log", "netdev", "nix 0.28.0", "openssl", @@ -1094,6 +1187,8 @@ dependencies = [ "tokio-stream", "tokio-tun", "tokio-util", + "tracing", + "tracing-subscriber", "tun", "wintun 0.4.0", "x25519-dalek", @@ -1105,15 +1200,15 @@ version = "0.5.2" dependencies = [ "axum", "base64 0.22.1", - "clap", - "log", + "clap 4.5.4", "mycelium", - "pretty_env_logger", "prometheus", "reqwest", "serde", "serde_json", "tokio", + "tracing", + "tracing-subscriber", ] [[package]] @@ -1236,6 +1331,16 @@ dependencies = [ "memoffset", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1252,7 +1357,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.4", "libc", ] @@ -1325,23 +1430,23 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "oslog" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d2043d1f61d77cb2f4b1f7b7b2295f40507f5f8e9d1c8bf10a1ca5f97a3969" -dependencies = [ - "cc", - "dashmap", - "log", -] - [[package]] name = "overload" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + [[package]] name = "parking_lot" version = "0.12.1" @@ -1349,7 +1454,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core", + "parking_lot_core 0.9.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", ] [[package]] @@ -1360,7 +1479,7 @@ checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "smallvec", "windows-targets 0.48.5", ] @@ -1371,6 +1490,12 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "pem" version = "3.0.3" @@ -1455,16 +1580,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "pretty_env_logger" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" -dependencies = [ - "env_logger", - "log", -] - [[package]] name = "proc-macro2" version = "1.0.78" @@ -1508,7 +1623,7 @@ dependencies = [ "lazy_static", "libc", "memchr", - "parking_lot", + "parking_lot 0.12.1", "procfs", "thiserror", ] @@ -1612,6 +1727,15 @@ dependencies = [ "yasna", ] +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -1889,6 +2013,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -1929,6 +2059,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.11.0" @@ -2005,6 +2141,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + [[package]] name = "thiserror" version = "1.0.56" @@ -2186,6 +2331,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-android" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12612be8f868a09c0ceae7113ff26afe79d81a24473a393cb9120ece162e86c0" +dependencies = [ + "android_log-sys", + "tracing", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.27" @@ -2218,6 +2374,22 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-oslog" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bc58223383423483e4bc056c7e7b3f77bdee924a9d33834112c69ead06dc847" +dependencies = [ + "bindgen", + "cc", + "cfg-if", + "fnv", + "once_cell", + "parking_lot 0.11.2", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -2286,6 +2458,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-width" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" + [[package]] name = "universal-hash" version = "0.5.1" @@ -2331,6 +2509,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.4" @@ -2428,6 +2612,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/mobile/Cargo.toml b/mobile/Cargo.toml index 4f955ed..1d4b246 100644 --- a/mobile/Cargo.toml +++ b/mobile/Cargo.toml @@ -11,11 +11,12 @@ tokio = { version = "1.37.0", features = [ "signal", "rt-multi-thread", ] } -log = "0.4.21" +tracing = { version = "0.1.40", features = ["release_max_level_debug"] } +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } once_cell = "1.19.0" [target.'cfg(target_os = "android")'.dependencies] -android_logger = "0.13.3" +tracing-android = "0.2.0" [target.'cfg(target_os = "ios")'.dependencies] -oslog = "0.2.0" +tracing-oslog = "0.1.2" diff --git a/mobile/src/lib.rs b/mobile/src/lib.rs index d9cc2e4..9895453 100644 --- a/mobile/src/lib.rs +++ b/mobile/src/lib.rs @@ -1,25 +1,29 @@ use std::convert::TryFrom; use std::io; -use log::{error, info}; +use tracing::{error, info}; use metrics::Metrics; use mycelium::endpoint::Endpoint; use mycelium::{crypto, metrics, Config, Node}; #[cfg(target_os = "android")] -fn setup_the_logger() { - use log::LevelFilter; - android_logger::init_once(android_logger::Config::default().with_max_level(LevelFilter::Info)); +fn setup_logging() { + use tracing_subscriber::layer::SubscriberExt; + use tracing_subscriber::util::SubscriberInitExt; + tracing_subscriber::registry() + .with(tracing_android::layer("mycelium").expect("failed to setup logger")) + .init(); } #[cfg(target_os = "ios")] -fn setup_the_logger() { - use log::LevelFilter; - oslog::OsLogger::new("mycelium") - .level_filter(LevelFilter::Info) - .init() - .unwrap(); +fn setup_logging() { + use tracing_oslog::OsLogger; + use tracing_subscriber::layer::SubscriberExt; + use tracing_subscriber::util::SubscriberInitExt; + tracing_subscriber::registry() + .with(OsLogger::new("mycelium", "default")) + .init(); } use once_cell::sync::Lazy; @@ -36,7 +40,7 @@ static CHANNEL: Lazy<(Mutex>, Mutex>)> = Laz #[allow(unused_variables)] // because tun_fd is only used in android and ios pub async fn start_mycelium(peers: Vec, tun_fd: i32, priv_key: Vec) { #[cfg(any(target_os = "android", target_os = "ios"))] - setup_the_logger(); + setup_logging(); info!("starting mycelium"); let endpoints: Vec = peers diff --git a/mycelium/Cargo.toml b/mycelium/Cargo.toml index cec0588..d92134a 100644 --- a/mycelium/Cargo.toml +++ b/mycelium/Cargo.toml @@ -25,7 +25,8 @@ rand = "0.8.5" bytes = "1.6.0" x25519-dalek = { version = "2.0.1", features = ["getrandom", "static_secrets"] } aes-gcm = "0.10.3" -log = { version = "0.4.21" } +tracing = { version = "0.1.40", features = ["release_max_level_debug"] } +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } faster-hex = "0.9.0" tokio-stream = { version = "0.1.15", features = ["sync"] } left-right = "0.11.5" diff --git a/mycelium/src/babel.rs b/mycelium/src/babel.rs index d778488..30a5e01 100644 --- a/mycelium/src/babel.rs +++ b/mycelium/src/babel.rs @@ -7,8 +7,8 @@ use std::io; use bytes::{Buf, BufMut}; -use log::trace; use tokio_util::codec::{Decoder, Encoder}; +use tracing::trace; pub use self::{ hello::Hello, ihu::Ihu, route_request::RouteRequest, seqno_request::SeqNoRequest, diff --git a/mycelium/src/babel/hello.rs b/mycelium/src/babel/hello.rs index 20954b1..102594d 100644 --- a/mycelium/src/babel/hello.rs +++ b/mycelium/src/babel/hello.rs @@ -1,7 +1,7 @@ //! The babel [Hello TLV](https://datatracker.ietf.org/doc/html/rfc8966#section-4.6.5). use bytes::{Buf, BufMut}; -use log::trace; +use tracing::trace; use crate::sequence_number::SeqNo; diff --git a/mycelium/src/babel/ihu.rs b/mycelium/src/babel/ihu.rs index de2916b..5296a9b 100644 --- a/mycelium/src/babel/ihu.rs +++ b/mycelium/src/babel/ihu.rs @@ -3,7 +3,7 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use bytes::{Buf, BufMut}; -use log::trace; +use tracing::trace; use crate::metric::Metric; diff --git a/mycelium/src/babel/route_request.rs b/mycelium/src/babel/route_request.rs index 0a66d25..4e4f165 100644 --- a/mycelium/src/babel/route_request.rs +++ b/mycelium/src/babel/route_request.rs @@ -1,7 +1,7 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use bytes::{Buf, BufMut}; -use log::trace; +use tracing::trace; use crate::subnet::Subnet; diff --git a/mycelium/src/babel/seqno_request.rs b/mycelium/src/babel/seqno_request.rs index 6736eca..7b122f3 100644 --- a/mycelium/src/babel/seqno_request.rs +++ b/mycelium/src/babel/seqno_request.rs @@ -4,7 +4,7 @@ use std::{ }; use bytes::{Buf, BufMut}; -use log::{debug, trace}; +use tracing::{debug, trace}; use crate::{router_id::RouterId, sequence_number::SeqNo, subnet::Subnet}; diff --git a/mycelium/src/babel/update.rs b/mycelium/src/babel/update.rs index 819b99c..d39a6cf 100644 --- a/mycelium/src/babel/update.rs +++ b/mycelium/src/babel/update.rs @@ -6,7 +6,7 @@ use std::{ }; use bytes::{Buf, BufMut}; -use log::trace; +use tracing::trace; use crate::{metric::Metric, router_id::RouterId, sequence_number::SeqNo, subnet::Subnet}; diff --git a/mycelium/src/data.rs b/mycelium/src/data.rs index 5fb089e..c8fcb5d 100644 --- a/mycelium/src/data.rs +++ b/mycelium/src/data.rs @@ -2,8 +2,8 @@ use std::net::{IpAddr, Ipv6Addr}; use etherparse::{icmpv6::DestUnreachableCode, Icmpv6Type, PacketBuilder}; use futures::{Sink, SinkExt, Stream, StreamExt}; -use log::{debug, error, trace, warn}; use tokio::sync::mpsc::UnboundedReceiver; +use tracing::{debug, error, trace, warn}; use crate::{crypto::PacketBuffer, metrics::Metrics, packet::DataPacket, router::Router}; @@ -279,7 +279,7 @@ where let mut decrypted_packet = match shared_secret.decrypt(data_packet.raw_data) { Ok(data) => data, Err(_) => { - log::debug!("Dropping data packet with invalid encrypted content"); + debug!("Dropping data packet with invalid encrypted content"); continue; } }; diff --git a/mycelium/src/lib.rs b/mycelium/src/lib.rs index 02fd3a1..69e45a5 100644 --- a/mycelium/src/lib.rs +++ b/mycelium/src/lib.rs @@ -6,7 +6,6 @@ use crate::tun::TunConfig; use bytes::BytesMut; use data::DataPlane; use endpoint::Endpoint; -use log::{error, info, warn}; #[cfg(feature = "message")] use message::{ MessageId, MessageInfo, MessagePushResponse, MessageStack, PushMessageError, ReceivedMessage, @@ -15,6 +14,7 @@ use metrics::Metrics; use peer_manager::{PeerExists, PeerNotFound, PeerStats, PrivateNetworkKey}; use routing_table::RouteEntry; use subnet::Subnet; +use tracing::{error, info, warn}; mod babel; mod connection; diff --git a/mycelium/src/message.rs b/mycelium/src/message.rs index 776bef1..29fee3a 100644 --- a/mycelium/src/message.rs +++ b/mycelium/src/message.rs @@ -16,10 +16,10 @@ use std::{ }; use futures::{Stream, StreamExt}; -use log::{debug, error, trace, warn}; use rand::Fill; use serde::{de::Visitor, Deserialize, Deserializer, Serialize}; use tokio::sync::watch; +use tracing::{debug, error, trace, warn}; use crate::{ crypto::{PacketBuffer, PublicKey}, diff --git a/mycelium/src/peer.rs b/mycelium/src/peer.rs index 6652734..875c8ee 100644 --- a/mycelium/src/peer.rs +++ b/mycelium/src/peer.rs @@ -1,5 +1,4 @@ use futures::{SinkExt, StreamExt}; -use log::{debug, error, info, trace}; use std::{ error::Error, io, @@ -13,6 +12,7 @@ use tokio::{ sync::{mpsc, Notify}, }; use tokio_util::codec::Framed; +use tracing::{debug, error, info, trace}; use crate::{ connection::{self, Connection}, diff --git a/mycelium/src/peer_manager.rs b/mycelium/src/peer_manager.rs index 299ba48..ec133da 100644 --- a/mycelium/src/peer_manager.rs +++ b/mycelium/src/peer_manager.rs @@ -6,7 +6,6 @@ use crate::router::Router; use crate::router_id::RouterId; use futures::stream::FuturesUnordered; use futures::{FutureExt, StreamExt}; -use log::{debug, error, info, trace, warn}; use openssl::ssl::{Ssl, SslAcceptor, SslConnector, SslMethod}; use quinn::crypto::rustls::QuicClientConfig; use quinn::{MtuDiscoveryConfig, ServerConfig, TransportConfig}; @@ -27,6 +26,7 @@ use tokio::net::TcpStream; use tokio::net::{TcpListener, UdpSocket}; use tokio::task::AbortHandle; use tokio::time::MissedTickBehavior; +use tracing::{debug, error, info, trace, warn}; /// Magic bytes to identify a multicast UDP packet used in link local peer discovery. const MYCELIUM_MULTICAST_DISCOVERY_MAGIC: &[u8; 8] = b"mycelium"; diff --git a/mycelium/src/router.rs b/mycelium/src/router.rs index 001f01b..879fce4 100644 --- a/mycelium/src/router.rs +++ b/mycelium/src/router.rs @@ -17,7 +17,6 @@ use etherparse::{ Icmpv6Type, }; use left_right::{ReadHandle, WriteHandle}; -use log::{debug, error, info, trace, warn}; use std::{ error::Error, net::IpAddr, @@ -25,6 +24,7 @@ use std::{ time::{Duration, Instant}, }; use tokio::sync::mpsc::{self, Receiver, Sender, UnboundedReceiver, UnboundedSender}; +use tracing::{debug, error, info, trace, warn}; /// Time between HELLO messags, in seconds const HELLO_INTERVAL: u64 = 20; diff --git a/mycelium/src/routing_table.rs b/mycelium/src/routing_table.rs index a3b54db..45a4094 100644 --- a/mycelium/src/routing_table.rs +++ b/mycelium/src/routing_table.rs @@ -1,6 +1,6 @@ use ip_network_table_deps_treebitmap::IpLookupTable; -use log::{error, warn}; use tokio::{sync::mpsc, task::JoinHandle}; +use tracing::{error, warn}; use crate::{ metric::Metric, peer::Peer, router_id::RouterId, sequence_number::SeqNo, diff --git a/mycelium/src/source_table.rs b/mycelium/src/source_table.rs index 9c8ce54..1d8e6e8 100644 --- a/mycelium/src/source_table.rs +++ b/mycelium/src/source_table.rs @@ -1,8 +1,8 @@ use core::fmt; use std::{collections::HashMap, time::Duration}; -use log::error; use tokio::{sync::mpsc, task::JoinHandle}; +use tracing::error; use crate::{ babel, metric::Metric, router_id::RouterId, routing_table::RouteEntry, sequence_number::SeqNo, diff --git a/mycelium/src/tun/android.rs b/mycelium/src/tun/android.rs index 233c4b0..bebcc0d 100644 --- a/mycelium/src/tun/android.rs +++ b/mycelium/src/tun/android.rs @@ -3,12 +3,12 @@ use std::io::{self}; use futures::{Sink, Stream}; -use log::{error, info}; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, select, sync::mpsc, }; +use tracing::{error, info}; use crate::crypto::PacketBuffer; use crate::tun::TunConfig; diff --git a/mycelium/src/tun/darwin.rs b/mycelium/src/tun/darwin.rs index 14beb19..e09be34 100644 --- a/mycelium/src/tun/darwin.rs +++ b/mycelium/src/tun/darwin.rs @@ -9,13 +9,13 @@ use std::{ }; use futures::{Sink, Stream}; -use log::{debug, error, info}; use nix::sys::socket::SockaddrIn6; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, select, sync::mpsc, }; +use tracing::{debug, error, info}; use crate::crypto::PacketBuffer; use crate::subnet::Subnet; diff --git a/mycelium/src/tun/ios.rs b/mycelium/src/tun/ios.rs index 0a24be0..477980f 100644 --- a/mycelium/src/tun/ios.rs +++ b/mycelium/src/tun/ios.rs @@ -3,12 +3,12 @@ use std::io::{self, IoSlice}; use futures::{Sink, Stream}; -use log::{error, info}; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, select, sync::mpsc, }; +use tracing::{error, info}; use crate::crypto::PacketBuffer; use crate::tun::TunConfig; diff --git a/mycelium/src/tun/linux.rs b/mycelium/src/tun/linux.rs index 90f8d77..162b2d1 100644 --- a/mycelium/src/tun/linux.rs +++ b/mycelium/src/tun/linux.rs @@ -3,10 +3,10 @@ use std::io; use futures::{Sink, Stream, TryStreamExt}; -use log::{error, info}; use rtnetlink::Handle; use tokio::{select, sync::mpsc}; use tokio_tun::{Tun, TunBuilder}; +use tracing::{error, info}; use crate::crypto::PacketBuffer; use crate::subnet::Subnet; diff --git a/mycelium/src/tun/windows.rs b/mycelium/src/tun/windows.rs index b58f91b..0468cb4 100644 --- a/mycelium/src/tun/windows.rs +++ b/mycelium/src/tun/windows.rs @@ -1,8 +1,8 @@ use std::{io, ops::Deref, sync::Arc}; use futures::{Sink, Stream}; -use log::{error, info, warn}; use tokio::sync::mpsc; +use tracing::{error, info, warn}; use crate::tun::TunConfig; use crate::{crypto::PacketBuffer, subnet::Subnet}; diff --git a/myceliumd/Cargo.toml b/myceliumd/Cargo.toml index 7fae2ae..19791f9 100644 --- a/myceliumd/Cargo.toml +++ b/myceliumd/Cargo.toml @@ -16,9 +16,9 @@ path = "src/main.rs" [dependencies] clap = { version = "4.5.4", features = ["derive"] } -log = { version = "0.4.21", features = ["release_max_level_debug"] } +tracing = { version = "0.1.40", features = ["release_max_level_debug"] } +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } mycelium = { path = "../mycelium", features = ["message"] } -pretty_env_logger = "0.5.0" serde = { version = "1.0.202", features = ["derive"] } serde_json = "1.0.117" tokio = { version = "1.37.0", features = [ diff --git a/myceliumd/src/api.rs b/myceliumd/src/api.rs index 5e1b28f..9445649 100644 --- a/myceliumd/src/api.rs +++ b/myceliumd/src/api.rs @@ -6,9 +6,9 @@ use axum::{ routing::{delete, get}, Json, Router, }; -use log::{debug, error}; use serde::{Deserialize, Serialize}; use tokio::sync::Mutex; +use tracing::{debug, error}; use mycelium::{ endpoint::Endpoint, diff --git a/myceliumd/src/api/message.rs b/myceliumd/src/api/message.rs index aa8efdd..0b89d49 100644 --- a/myceliumd/src/api/message.rs +++ b/myceliumd/src/api/message.rs @@ -6,8 +6,8 @@ use axum::{ routing::{get, post}, Json, Router, }; -use log::debug; use serde::{Deserialize, Serialize}; +use tracing::debug; use mycelium::{ crypto::PublicKey, diff --git a/myceliumd/src/cli/message.rs b/myceliumd/src/cli/message.rs index a3c4d3a..0fd5ef7 100644 --- a/myceliumd/src/cli/message.rs +++ b/myceliumd/src/cli/message.rs @@ -10,9 +10,9 @@ use base64::{ engine::{GeneralPurpose, GeneralPurposeConfig}, Engine, }; -use log::{debug, error}; use mycelium::{crypto::PublicKey, message::MessageId, subnet::Subnet}; use serde::{Serialize, Serializer}; +use tracing::{debug, error}; use crate::api::{MessageDestination, MessageReceiveInfo, MessageSendInfo, PushMessageResponse}; diff --git a/myceliumd/src/main.rs b/myceliumd/src/main.rs index b6c0e7a..347045e 100644 --- a/myceliumd/src/main.rs +++ b/myceliumd/src/main.rs @@ -8,15 +8,18 @@ use std::{ }; use clap::{Args, Parser, Subcommand}; -use log::{debug, error, warn, LevelFilter}; use tokio::fs::File; use tokio::io::{AsyncReadExt, AsyncWriteExt}; #[cfg(target_family = "unix")] use tokio::signal::{self, unix::SignalKind}; +use tracing::{debug, error, warn}; use crypto::PublicKey; use mycelium::endpoint::Endpoint; use mycelium::{crypto, Node}; +use tracing_subscriber::layer::SubscriberExt; +use tracing_subscriber::util::SubscriberInitExt; +use tracing_subscriber::{EnvFilter, Layer}; mod api; mod cli; @@ -211,16 +214,22 @@ pub struct NodeArguments { async fn main() -> Result<(), Box> { let cli = Cli::parse(); - pretty_env_logger::formatted_timed_builder() - .filter_module( - "mycelium", - if cli.silent { - LevelFilter::Error - } else if cli.debug { - LevelFilter::Debug - } else { - LevelFilter::Info - }, + let level = if cli.silent { + tracing::Level::ERROR + } else if cli.debug { + tracing::Level::DEBUG + } else { + tracing::Level::INFO + }; + + tracing_subscriber::registry() + .with( + tracing_subscriber::fmt::Layer::new().compact().with_filter( + EnvFilter::builder() + .with_default_directive(level.into()) + .from_env() + .expect("invalid RUST_LOG"), + ), ) .init(); @@ -371,7 +380,7 @@ async fn main() -> Result<(), Box> { #[cfg(not(target_family = "unix"))] { if let Err(e) = tokio::signal::ctrl_c().await { - log::error!("Failed to wait for SIGINT: {e}"); + error!("Failed to wait for SIGINT: {e}"); } } diff --git a/myceliumd/src/metrics.rs b/myceliumd/src/metrics.rs index 40e99c5..7b3b17b 100644 --- a/myceliumd/src/metrics.rs +++ b/myceliumd/src/metrics.rs @@ -4,12 +4,12 @@ use std::net::SocketAddr; use axum::{routing::get, Router}; -use log::{error, info}; use mycelium::metrics::Metrics; use prometheus::{ opts, register_int_counter, register_int_counter_vec, register_int_gauge, Encoder, IntCounter, IntCounterVec, IntGauge, TextEncoder, }; +use tracing::{error, info}; #[derive(Clone)] pub struct NoMetrics;