From b2a41025ce42bc4f9e6b405a00a174b5e0cd3d06 Mon Sep 17 00:00:00 2001 From: Lorenz Leutgeb Date: Tue, 29 Jul 2025 23:28:34 +0200 Subject: [PATCH] node: Enable logging via systemd journal --- crates/radicle-node/src/main.rs | 20 ++++++++++++++++++-- crates/radicle/src/logger.rs | 6 ++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/crates/radicle-node/src/main.rs b/crates/radicle-node/src/main.rs index 6cef897d..cf1d9d60 100644 --- a/crates/radicle-node/src/main.rs +++ b/crates/radicle-node/src/main.rs @@ -4,7 +4,6 @@ use std::{env, fs, net, path::PathBuf, process}; use anyhow::Context; use crossbeam_channel as chan; -use radicle::logger; use radicle::node::device::Device; use radicle::profile; use radicle_node::crypto::ssh::keystore::{Keystore, MemorySigner}; @@ -91,7 +90,24 @@ fn execute() -> anyhow::Result<()> { let config = options.config.unwrap_or_else(|| home.config()); let mut config = profile::Config::load(&config)?; - logger::init(options.log.unwrap_or(config.node.log))?; + let level = options.log.unwrap_or(config.node.log); + + let logger = { + let journal = if cfg!(all(feature = "systemd", target_family = "unix")) { + radicle_systemd::journal::logger::<&str, &str, _>("radicle-node".to_string(), [])? + } else { + None + }; + + if let Some(logger) = journal { + logger + } else { + Box::new(radicle::logger::Logger::new(level)) + } + }; + + log::set_boxed_logger(logger)?; + log::set_max_level(level.to_level_filter()); log::info!(target: "node", "Starting node.."); log::info!(target: "node", "Version {} ({})", env!("RADICLE_VERSION"), env!("GIT_HEAD")); diff --git a/crates/radicle/src/logger.rs b/crates/radicle/src/logger.rs index 2b38ac84..4a829fdd 100644 --- a/crates/radicle/src/logger.rs +++ b/crates/radicle/src/logger.rs @@ -17,6 +17,12 @@ pub struct Logger { level: Level, } +impl Logger { + pub fn new(level: Level) -> Self { + Self { level } + } +} + impl Log for Logger { fn enabled(&self, metadata: &Metadata) -> bool { metadata.level() <= self.level