From 139e833d04a25d4862de1505e49ff57de5158e2a Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 10 Mar 2022 14:20:20 +0530 Subject: [PATCH] feat(logging): add a journald feature to log to systemd --- Cargo.lock | 12 ++++++++++++ Cargo.toml | 4 ++++ src/main.rs | 10 ++++++++++ 3 files changed, 26 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index b2d210b..f1b3028 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,6 +93,7 @@ dependencies = [ "serde_derive", "toml", "tracing", + "tracing-journald", "tracing-subscriber", ] @@ -510,6 +511,17 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-journald" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a63bcca9cab23195673d7c3c7db8aff5fc062b82cd1e51c396d9dc26968c3c" +dependencies = [ + "libc", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "tracing-log" version = "0.1.2" diff --git a/Cargo.toml b/Cargo.toml index d83c270..6d6da39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,11 @@ serde = "1.0.136" serde_derive = "1.0.136" toml = "0.5.8" tracing = "0.1.32" +tracing-journald = { version = "0.2.3", optional = true } tracing-subscriber = { version = "0.3.9", features = ["env-filter"] } [dev-dependencies] assay = "0.1.1" + +[features] +journald = ["tracing-journald"] diff --git a/src/main.rs b/src/main.rs index 0414d2f..516e47b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,8 @@ use anyhow::{anyhow, Result}; use clipboard::{ClipboardContext, ClipboardProvider}; use dirs::config_dir; use tracing::{debug, error, Level}; +#[cfg(journald)] +use tracing_journald::Subscriber; use tracing_subscriber::FmtSubscriber; use crate::config::{Act, Match, Replacements}; @@ -47,6 +49,7 @@ fn print_version() { ); } +#[cfg(not(journald))] fn configure_tracing() { let subscriber = FmtSubscriber::builder() .with_max_level(Level::TRACE) @@ -56,6 +59,13 @@ fn configure_tracing() { .expect("setting default subscriber failed"); } +#[cfg(journald)] +fn configure_tracing() { + let sub = Registry::default() + .with(Subscriber::new().unwrap().with_field_prefix(None)); + tracing::collect::with_default(sub, f); +} + fn get_config_path() -> Result { let mut config_path = config_dir().ok_or_else(|| anyhow!("Failed to get config dir"))?;