From caee776c388ffac2ea55cc9d1e3d7fa108ca6df5 Mon Sep 17 00:00:00 2001 From: Adrian Duke Date: Thu, 22 Jan 2026 17:28:37 +0000 Subject: [PATCH] log: New crate for logger implementations Move logging-related module `radicle::logging` into its own crate. While at it, remove the "logger" feature flag from `radicle`. Co-authored-by: Lorenz Leutgeb --- Cargo.lock | 19 ++++++++++++++++-- Cargo.toml | 1 + crates/radicle-cli-test/Cargo.toml | 4 +++- crates/radicle-cli-test/src/lib.rs | 7 +++++-- crates/radicle-cli/Cargo.toml | 4 +++- crates/radicle-cli/src/main.rs | 4 ++-- crates/radicle-cli/tests/commands.rs | 2 +- crates/radicle-log/Cargo.toml | 20 +++++++++++++++++++ .../src/logger.rs => radicle-log/src/lib.rs} | 3 +-- .../src/logger => radicle-log/src}/test.rs | 2 +- crates/radicle-node/Cargo.toml | 4 +++- crates/radicle-node/src/main.rs | 2 +- crates/radicle-node/src/test.rs | 2 +- crates/radicle-protocol/Cargo.toml | 4 ++-- crates/radicle-remote-helper/Cargo.toml | 3 ++- crates/radicle-remote-helper/src/main.rs | 4 ++-- crates/radicle/Cargo.toml | 3 --- crates/radicle/src/lib.rs | 2 -- 18 files changed, 65 insertions(+), 25 deletions(-) create mode 100644 crates/radicle-log/Cargo.toml rename crates/{radicle/src/logger.rs => radicle-log/src/lib.rs} (98%) rename crates/{radicle/src/logger => radicle-log/src}/test.rs (98%) diff --git a/Cargo.lock b/Cargo.lock index f7c03974..0b4e6a7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2981,8 +2981,6 @@ dependencies = [ "amplify", "base64 0.21.7", "bytesize", - "chrono", - "colored", "crossbeam-channel", "cyphernet", "dunce", @@ -3038,6 +3036,7 @@ dependencies = [ "radicle-cob", "radicle-crypto", "radicle-localtime", + "radicle-log", "radicle-node", "radicle-surf", "radicle-term", @@ -3073,6 +3072,8 @@ dependencies = [ "log", "pretty_assertions", "radicle", + "radicle-log", + "radicle-term", "shlex", "snapbox", "thiserror 2.0.18", @@ -3208,6 +3209,18 @@ dependencies = [ "serde_json", ] +[[package]] +name = "radicle-log" +version = "0.1.0" +dependencies = [ + "chrono", + "colored", + "log", + "radicle-localtime", + "radicle-term", + "regex", +] + [[package]] name = "radicle-node" version = "0.20.0" @@ -3228,6 +3241,7 @@ dependencies = [ "radicle-crypto", "radicle-fetch", "radicle-localtime", + "radicle-log", "radicle-protocol", "radicle-signals", "radicle-systemd", @@ -3289,6 +3303,7 @@ dependencies = [ "log", "radicle", "radicle-cli", + "radicle-log", "thiserror 2.0.18", ] diff --git a/Cargo.toml b/Cargo.toml index eb174602..868c7371 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -57,6 +57,7 @@ radicle-fetch = { version = "0.20", path = "crates/radicle-fetch" } radicle-git-metadata = { version = "0.2.0", path = "crates/radicle-git-metadata", default-features = false } radicle-git-ref-format = { version = "0.1.0", path = "crates/radicle-git-ref-format", default-features = false } radicle-localtime = { version = "0.1", path = "crates/radicle-localtime" } +radicle-log = { version = "0.1", path = "crates/radicle-log" } radicle-node = { version = "0.20", path = "crates/radicle-node" } radicle-oid = { version = "0.2.0", path = "crates/radicle-oid", default-features = false } radicle-protocol = { version = "0.8", path = "crates/radicle-protocol" } diff --git a/crates/radicle-cli-test/Cargo.toml b/crates/radicle-cli-test/Cargo.toml index 1bb09fc4..95c2ac29 100644 --- a/crates/radicle-cli-test/Cargo.toml +++ b/crates/radicle-cli-test/Cargo.toml @@ -15,7 +15,9 @@ rust-version.workspace = true escargot = "0.5.7" log = { workspace = true, features = ["std"] } pretty_assertions = { workspace = true } -radicle = { workspace = true, features = ["logger", "test"]} +radicle = { workspace = true, features = ["test"] } +radicle-log = { workspace = true, features = ["test"] } +radicle-term = { workspace = true } snapbox = { workspace = true } thiserror = { workspace = true, default-features = true } diff --git a/crates/radicle-cli-test/src/lib.rs b/crates/radicle-cli-test/src/lib.rs index d900ec1a..36015269 100644 --- a/crates/radicle-cli-test/src/lib.rs +++ b/crates/radicle-cli-test/src/lib.rs @@ -186,8 +186,11 @@ impl TestFormula { // We don't need to re-build every time the `build` function is called. Once is enough. BUILD.call_once(|| { use escargot::format::Message; - use radicle::logger::env_level; - use radicle::logger::test::Logger; + use radicle_log::env_level; + use radicle_log::test::Logger; + use radicle_term::Paint; + + Paint::force(true); let level = env_level().unwrap_or(log::Level::Debug); let logger = Box::new(Logger::new(level)); diff --git a/crates/radicle-cli/Cargo.toml b/crates/radicle-cli/Cargo.toml index 804639b5..a7874df1 100644 --- a/crates/radicle-cli/Cargo.toml +++ b/crates/radicle-cli/Cargo.toml @@ -29,12 +29,13 @@ humantime.workspace = true itertools.workspace = true log = { workspace = true, features = ["std"] } nonempty = { workspace = true } -radicle = { workspace = true, features = ["logger", "schemars"] } +radicle = { workspace = true, features = ["schemars"] } radicle-cob = { workspace = true } radicle-crypto = { workspace = true } radicle-localtime = { workspace = true } radicle-surf = { workspace = true } radicle-term = { workspace = true } +radicle-log = { workspace = true } schemars = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } @@ -69,6 +70,7 @@ radicle = { workspace = true, features = ["test"] } radicle-cli-test = { workspace = true } radicle-localtime = { workspace = true } radicle-node = { workspace = true, features = ["test"] } +radicle-log = { workspace = true, features = ["test"] } [lints] workspace = true diff --git a/crates/radicle-cli/src/main.rs b/crates/radicle-cli/src/main.rs index 658b105f..29bd54aa 100644 --- a/crates/radicle-cli/src/main.rs +++ b/crates/radicle-cli/src/main.rs @@ -137,8 +137,8 @@ fn main() { })); } - if let Some(lvl) = radicle::logger::env_level() { - let logger = Box::new(radicle::logger::Logger::new()); + if let Some(lvl) = radicle_log::env_level() { + let logger = Box::new(radicle_log::Logger::new()); log::set_boxed_logger(logger).expect("no other logger should have been set already"); log::set_max_level(lvl.to_level_filter()); } diff --git a/crates/radicle-cli/tests/commands.rs b/crates/radicle-cli/tests/commands.rs index 1403aec8..8807212d 100644 --- a/crates/radicle-cli/tests/commands.rs +++ b/crates/radicle-cli/tests/commands.rs @@ -7,7 +7,7 @@ use radicle::prelude::RepoId; use radicle::profile::Home; #[allow(unused_imports)] -use radicle_node::test::logger; +use radicle_log::test::Logger; mod util; use util::environment::Environment; diff --git a/crates/radicle-log/Cargo.toml b/crates/radicle-log/Cargo.toml new file mode 100644 index 00000000..353da011 --- /dev/null +++ b/crates/radicle-log/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "radicle-log" +description = "Radicle loggers" +homepage.workspace = true +repository.workspace = true +license.workspace = true +version = "0.1.0" +edition.workspace = true +rust-version.workspace = true + +[features] +test = [] + +[dependencies] +chrono = { workspace = true, features = ["clock"] } +colored = { workspace = true } +radicle-localtime = { workspace = true, features = ["serde"] } +log = { version = "0.4", features = ["std"] } +radicle-term = { workspace = true } +regex = "1" diff --git a/crates/radicle/src/logger.rs b/crates/radicle-log/src/lib.rs similarity index 98% rename from crates/radicle/src/logger.rs rename to crates/radicle-log/src/lib.rs index e6fbc25b..e178d9a7 100644 --- a/crates/radicle/src/logger.rs +++ b/crates/radicle-log/src/lib.rs @@ -5,8 +5,7 @@ #[cfg(feature = "test")] pub mod test; -use std::io; -use std::io::Write; +use std::io::{self, Write}; use chrono::prelude::*; use colored::*; diff --git a/crates/radicle/src/logger/test.rs b/crates/radicle-log/src/test.rs similarity index 98% rename from crates/radicle/src/logger/test.rs rename to crates/radicle-log/src/test.rs index fc8d81b2..f924d505 100644 --- a/crates/radicle/src/logger/test.rs +++ b/crates/radicle-log/src/test.rs @@ -1,5 +1,5 @@ -use localtime::LocalTime; use log::*; +use radicle_localtime::LocalTime; pub struct Logger { level: Level, diff --git a/crates/radicle-node/Cargo.toml b/crates/radicle-node/Cargo.toml index e6a14d92..1f7d271e 100644 --- a/crates/radicle-node/Cargo.toml +++ b/crates/radicle-node/Cargo.toml @@ -28,11 +28,12 @@ lexopt = { workspace = true } log = { workspace = true, features = ["kv", "std"] } mio = { version = "1", features = ["net", "os-poll"] } qcheck = { workspace = true, optional = true } -radicle = { workspace = true, features = ["logger"] } +radicle = { workspace = true } radicle-fetch = { workspace = true } radicle-localtime = { workspace = true } radicle-protocol = { workspace = true } radicle-signals = { workspace = true } +radicle-log = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true, features = ["preserve_order"] } snapbox = { workspace = true, optional = true } @@ -53,6 +54,7 @@ mio = { version = "1", features = ["os-ext"] } qcheck = { workspace = true } qcheck-macros = { workspace = true } radicle = { workspace = true, features = ["test"] } +radicle-log = { workspace = true, features = ["test"] } radicle-protocol = { workspace = true, features = ["test"] } radicle-crypto = { workspace = true, features = ["test", "cyphernet"] } snapbox = { workspace = true } diff --git a/crates/radicle-node/src/main.rs b/crates/radicle-node/src/main.rs index 25d7c65b..079546da 100644 --- a/crates/radicle-node/src/main.rs +++ b/crates/radicle-node/src/main.rs @@ -401,7 +401,7 @@ fn initialize_logging(options: &LogOptions) -> Result<(), Box(SYSLOG_IDENTIFIER.to_string(), []).map_err(Box::new)? } - Logger::Radicle => Box::new(radicle::logger::Logger::new()), + Logger::Radicle => Box::new(radicle_log::Logger::new()), } }; diff --git a/crates/radicle-node/src/test.rs b/crates/radicle-node/src/test.rs index 87500a36..7a828f57 100644 --- a/crates/radicle-node/src/test.rs +++ b/crates/radicle-node/src/test.rs @@ -5,5 +5,5 @@ pub mod peer; pub mod simulator; pub use radicle::assert_matches; -pub use radicle::logger::test as logger; pub use radicle::test::*; +pub use radicle_log::test as logger; diff --git a/crates/radicle-protocol/Cargo.toml b/crates/radicle-protocol/Cargo.toml index 07dcc529..db783822 100644 --- a/crates/radicle-protocol/Cargo.toml +++ b/crates/radicle-protocol/Cargo.toml @@ -22,7 +22,7 @@ fastrand = { workspace = true } log = { workspace = true, features = ["std"] } nonempty = { workspace = true, features = ["serialize"] } qcheck = { workspace = true, optional = true } -radicle = { workspace = true, features = ["logger"] } +radicle = { workspace = true } radicle-core = { workspace = true } radicle-fetch = { workspace = true } radicle-localtime = { workspace = true } @@ -36,4 +36,4 @@ pastey = "0.2" qcheck = { workspace = true } qcheck-macros = { workspace = true } radicle = { workspace = true, features = ["test"] } -radicle-crypto = { workspace = true, features = ["test", "cyphernet"] } \ No newline at end of file +radicle-crypto = { workspace = true, features = ["test", "cyphernet"] } diff --git a/crates/radicle-remote-helper/Cargo.toml b/crates/radicle-remote-helper/Cargo.toml index 67385c06..425ffa43 100644 --- a/crates/radicle-remote-helper/Cargo.toml +++ b/crates/radicle-remote-helper/Cargo.toml @@ -18,4 +18,5 @@ dunce = { workspace = true } log = { workspace = true } radicle = { workspace = true } radicle-cli = { workspace = true } -thiserror = { workspace = true, default-features = true } \ No newline at end of file +radicle-log = { workspace = true } +thiserror = { workspace = true, default-features = true } diff --git a/crates/radicle-remote-helper/src/main.rs b/crates/radicle-remote-helper/src/main.rs index b401dc69..e3c14b21 100644 --- a/crates/radicle-remote-helper/src/main.rs +++ b/crates/radicle-remote-helper/src/main.rs @@ -51,8 +51,8 @@ const VERSION: Version = Version { fn main() { let mut args = env::args(); - if let Some(lvl) = radicle::logger::env_level() { - let logger = radicle::logger::StderrLogger::new(); + if let Some(lvl) = radicle_log::env_level() { + let logger = radicle_log::StderrLogger::new(); log::set_boxed_logger(Box::new(logger)) .expect("no other logger should have been set already"); log::set_max_level(lvl.to_level_filter()); diff --git a/crates/radicle/Cargo.toml b/crates/radicle/Cargo.toml index b17466d9..a5afce01 100644 --- a/crates/radicle/Cargo.toml +++ b/crates/radicle/Cargo.toml @@ -15,7 +15,6 @@ default = [] gix = ["radicle-oid/gix"] i2p = ["cyphernet/i2p"] test = ["tempfile", "qcheck", "radicle-crypto/test", "radicle-cob/test"] -logger = ["colored", "chrono"] qcheck = [ "radicle-core/qcheck", "radicle-oid/qcheck", @@ -34,8 +33,6 @@ tor = ["cyphernet/tor"] amplify = { workspace = true, features = ["std"] } base64 = "0.21.3" bytesize = { version = "2", features = ["serde"] } -chrono = { workspace = true, features = ["clock"], optional = true } -colored = { workspace = true, optional = true } crossbeam-channel = { workspace = true } cyphernet = { workspace = true, features = ["dns", "p2p-ed25519"] } dunce = { workspace = true } diff --git a/crates/radicle/src/lib.rs b/crates/radicle/src/lib.rs index f02662e6..c1ee2025 100644 --- a/crates/radicle/src/lib.rs +++ b/crates/radicle/src/lib.rs @@ -17,8 +17,6 @@ pub mod explorer; pub mod git; pub mod identity; pub mod io; -#[cfg(feature = "logger")] -pub mod logger; pub mod node; pub mod profile; pub mod rad;