From 06cba08b539bd4f6bfe7559b3c71f27bd34ad1b6 Mon Sep 17 00:00:00 2001 From: "Felix C. Morency" <1102868+fmorency@users.noreply.github.com> Date: Fri, 27 May 2022 11:06:57 -0400 Subject: [PATCH 1/4] Add syslog logging Use the `tracing-syslog` crate and log to both stdout and syslog --- Cargo.lock | 72 ++++++++++-------------------------- src/http_proxy/Cargo.toml | 3 +- src/http_proxy/src/main.rs | 13 ++++++- src/kvstore/Cargo.toml | 3 +- src/kvstore/src/main.rs | 13 ++++++- src/ledger/Cargo.toml | 3 +- src/ledger/src/main.rs | 13 ++++++- src/many-abci/Cargo.toml | 3 +- src/many-abci/src/main.rs | 13 ++++++- src/many-kvstore/Cargo.toml | 3 +- src/many-kvstore/src/main.rs | 13 ++++++- src/many-ledger/Cargo.toml | 3 +- src/many-ledger/src/main.rs | 13 ++++++- 13 files changed, 103 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3fad5fec..7d1fe86c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1414,7 +1414,8 @@ dependencies = [ "tiny_http", "tokio", "tracing", - "tracing-subscriber 0.3.11", + "tracing-subscriber", + "tracing-syslog", ] [[package]] @@ -1653,7 +1654,8 @@ dependencies = [ "minicbor", "tokio", "tracing", - "tracing-subscriber 0.3.11", + "tracing-subscriber", + "tracing-syslog", ] [[package]] @@ -1689,7 +1691,8 @@ dependencies = [ "rpassword", "tokio", "tracing", - "tracing-subscriber 0.3.11", + "tracing-subscriber", + "tracing-syslog", ] [[package]] @@ -1814,7 +1817,8 @@ dependencies = [ "tendermint-rpc", "tokio", "tracing", - "tracing-subscriber 0.2.25", + "tracing-subscriber", + "tracing-syslog", ] [[package]] @@ -1879,7 +1883,8 @@ dependencies = [ "sha3", "simple_asn1", "tracing", - "tracing-subscriber 0.2.25", + "tracing-subscriber", + "tracing-syslog", ] [[package]] @@ -1910,7 +1915,8 @@ dependencies = [ "simple_asn1", "tempfile", "tracing", - "tracing-subscriber 0.2.25", + "tracing-subscriber", + "tracing-syslog", "typenum", ] @@ -1927,15 +1933,6 @@ dependencies = [ "syn", ] -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata", -] - [[package]] name = "matches" version = "0.1.9" @@ -2622,15 +2619,6 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - [[package]] name = "regex-syntax" version = "0.6.26" @@ -3576,50 +3564,28 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - [[package]] name = "tracing-subscriber" -version = "0.2.25" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" dependencies = [ "ansi_term", - "chrono", - "lazy_static", - "matchers", - "regex", - "serde", - "serde_json", "sharded-slab", "smallvec", "thread_local", - "tracing", "tracing-core", "tracing-log", - "tracing-serde", ] [[package]] -name = "tracing-subscriber" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" +name = "tracing-syslog" +version = "0.1.0" +source = "git+https://github.com/max-heller/tracing-syslog.git?rev=6ff222831d7a78f1068d4c8af94dea215b07f114#6ff222831d7a78f1068d4c8af94dea215b07f114" dependencies = [ - "ansi_term", - "sharded-slab", - "smallvec", - "thread_local", + "libc", "tracing-core", - "tracing-log", + "tracing-subscriber", ] [[package]] diff --git a/src/http_proxy/Cargo.toml b/src/http_proxy/Cargo.toml index 73ec236a..aec859ec 100644 --- a/src/http_proxy/Cargo.toml +++ b/src/http_proxy/Cargo.toml @@ -17,5 +17,6 @@ many-kvstore = { path = "../many-kvstore" } new_mime_guess = "4.0.0" tiny_http = "0.9.0" tracing = "0.1.29" -tracing-subscriber = "0.3.3" +tracing-subscriber = "0.3" +tracing-syslog = { git = "https://github.com/max-heller/tracing-syslog.git", rev = "6ff222831d7a78f1068d4c8af94dea215b07f114" } tokio = { version = "1.12.0", features = [ "full" ] } diff --git a/src/http_proxy/src/main.rs b/src/http_proxy/src/main.rs index b046d5de..62be6f53 100644 --- a/src/http_proxy/src/main.rs +++ b/src/http_proxy/src/main.rs @@ -3,6 +3,7 @@ use many::server::module::kvstore::{GetArgs, GetReturns}; use many::types::identity::cose::CoseKeyIdentity; use many::Identity; use many_client::ManyClient; +use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::net::SocketAddr; use std::path::PathBuf; use tiny_http::{Header, Method, Response, StatusCode}; @@ -55,7 +56,17 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let identity = std::ffi::CStr::from_bytes_with_nul(b"http_proxy\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + tracing::subscriber::set_global_default( + tracing_subscriber::fmt::Subscriber::builder() + .with_max_level(log_level) + .with_writer(syslog) + .finish() + .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), + ) + .expect("Unable to set global tracing subscriber"); let server_id = server_id.unwrap_or_default(); let key = pem.map_or_else(CoseKeyIdentity::anonymous, |p| { diff --git a/src/kvstore/Cargo.toml b/src/kvstore/Cargo.toml index 33bf6cc1..b9bcdb03 100644 --- a/src/kvstore/Cargo.toml +++ b/src/kvstore/Cargo.toml @@ -15,5 +15,6 @@ many = { git = "https://github.com/the-lifted-initiative/many-rs.git", rev = "c8 many-client = { git = "https://github.com/the-lifted-initiative/many-rs.git", rev = "c80f6314957bc0d7b084c883367bc012b5d473f7" } many-kvstore = { path = "../many-kvstore" } tracing = "0.1.29" -tracing-subscriber = "0.3.3" +tracing-subscriber = "0.3" +tracing-syslog = { git = "https://github.com/max-heller/tracing-syslog.git", rev = "6ff222831d7a78f1068d4c8af94dea215b07f114" } tokio = { version = "1.12.0", features = [ "full" ] } diff --git a/src/kvstore/src/main.rs b/src/kvstore/src/main.rs index 7853d7f4..b89d366f 100644 --- a/src/kvstore/src/main.rs +++ b/src/kvstore/src/main.rs @@ -4,6 +4,7 @@ use many::server::module::r#async; use many::types::identity::cose::CoseKeyIdentity; use many::{Identity, ManyError}; use many_client::ManyClient; +use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::io::Read; use std::path::PathBuf; use tracing::{error, trace}; @@ -143,7 +144,17 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let identity = std::ffi::CStr::from_bytes_with_nul(b"kvstore\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + tracing::subscriber::set_global_default( + tracing_subscriber::fmt::Subscriber::builder() + .with_max_level(log_level) + .with_writer(syslog) + .finish() + .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), + ) + .expect("Unable to set global tracing subscriber"); let server_id = server_id.unwrap_or_default(); let key = pem.map_or_else(CoseKeyIdentity::anonymous, |p| { diff --git a/src/ledger/Cargo.toml b/src/ledger/Cargo.toml index 39ccac72..daaf420d 100644 --- a/src/ledger/Cargo.toml +++ b/src/ledger/Cargo.toml @@ -24,5 +24,6 @@ regex = "1.5.4" ring = "0.17.0-alpha.10" rpassword = "6.0" tracing = "0.1.29" -tracing-subscriber = "0.3.3" +tracing-subscriber = "0.3" +tracing-syslog = { git = "https://github.com/max-heller/tracing-syslog.git", rev = "6ff222831d7a78f1068d4c8af94dea215b07f114" } tokio = { version = "1.12.0", features = [ "full" ] } diff --git a/src/ledger/src/main.rs b/src/ledger/src/main.rs index b3cfebc6..d6a1fc89 100644 --- a/src/ledger/src/main.rs +++ b/src/ledger/src/main.rs @@ -14,6 +14,7 @@ use minicbor::{Decoder, Encoder}; use num_bigint::BigUint; use tracing::{debug, error, info, trace}; use tracing_subscriber::filter::LevelFilter; +use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::collections::BTreeMap; use std::fmt::{Display, Formatter}; @@ -314,7 +315,17 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let identity = std::ffi::CStr::from_bytes_with_nul(b"ledger\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + tracing::subscriber::set_global_default( + tracing_subscriber::fmt::Subscriber::builder() + .with_max_level(log_level) + .with_writer(syslog) + .finish() + .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), + ) + .expect("Unable to set global tracing subscriber"); let server_id = server_id.unwrap_or_default(); let key = if let (Some(module), Some(slot), Some(keyid)) = (module, slot, keyid) { diff --git a/src/many-abci/Cargo.toml b/src/many-abci/Cargo.toml index 78f10add..05345aa5 100644 --- a/src/many-abci/Cargo.toml +++ b/src/many-abci/Cargo.toml @@ -27,4 +27,5 @@ tendermint-rpc = { git = "https://github.com/informalsystems/tendermint-rs.git", tendermint-proto = { git = "https://github.com/informalsystems/tendermint-rs.git" } tokio = { version = "1.13.0", features = [ "full" ] } tracing = "0.1.28" -tracing-subscriber = "0.2.24" +tracing-subscriber = "0.3" +tracing-syslog = { git = "https://github.com/max-heller/tracing-syslog.git", rev = "6ff222831d7a78f1068d4c8af94dea215b07f114" } diff --git a/src/many-abci/src/main.rs b/src/many-abci/src/main.rs index a9e9192a..c4dec7c6 100644 --- a/src/many-abci/src/main.rs +++ b/src/many-abci/src/main.rs @@ -4,6 +4,7 @@ use many::server::ManyUrl; use many::types::identity::cose::CoseKeyIdentity; use many::{Identity, ManyServer}; use many_client::ManyClient; +use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tendermint_abci::ServerBuilder; @@ -84,7 +85,17 @@ async fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let identity = std::ffi::CStr::from_bytes_with_nul(b"many-abci\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + tracing::subscriber::set_global_default( + tracing_subscriber::fmt::Subscriber::builder() + .with_max_level(log_level) + .with_writer(syslog) + .finish() + .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), + ) + .expect("Unable to set global tracing subscriber"); // Try to get the status of the backend MANY app. let many_client = ManyClient::new( diff --git a/src/many-kvstore/Cargo.toml b/src/many-kvstore/Cargo.toml index 61bda5a9..2fe02b24 100644 --- a/src/many-kvstore/Cargo.toml +++ b/src/many-kvstore/Cargo.toml @@ -23,4 +23,5 @@ serde_json = "1.0.72" sha3 = "0.9.1" simple_asn1 = "0.5.4" tracing = "0.1.28" -tracing-subscriber = "0.2.24" +tracing-subscriber = "0.3" +tracing-syslog = { git = "https://github.com/max-heller/tracing-syslog.git", rev = "6ff222831d7a78f1068d4c8af94dea215b07f114" } diff --git a/src/many-kvstore/src/main.rs b/src/many-kvstore/src/main.rs index bb794afb..37246377 100644 --- a/src/many-kvstore/src/main.rs +++ b/src/many-kvstore/src/main.rs @@ -3,6 +3,7 @@ use many::server::module::{abci_backend, kvstore}; use many::server::ManyServer; use many::transport::http::HttpServer; use many::types::identity::cose::CoseKeyIdentity; +use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tracing::level_filters::LevelFilter; @@ -71,7 +72,17 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let identity = std::ffi::CStr::from_bytes_with_nul(b"many-kvstore\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + tracing::subscriber::set_global_default( + tracing_subscriber::fmt::Subscriber::builder() + .with_max_level(log_level) + .with_writer(syslog) + .finish() + .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), + ) + .expect("Unable to set global tracing subscriber"); if clean { // Delete the persistent storage. diff --git a/src/many-ledger/Cargo.toml b/src/many-ledger/Cargo.toml index 22a03278..c07278ff 100644 --- a/src/many-ledger/Cargo.toml +++ b/src/many-ledger/Cargo.toml @@ -30,7 +30,8 @@ sha3 = "0.9.1" signal-hook = "0.3.13" simple_asn1 = "0.5.4" tracing = "0.1.28" -tracing-subscriber = "0.2.24" +tracing-subscriber = "0.3" +tracing-syslog = { git = "https://github.com/max-heller/tracing-syslog.git", rev = "6ff222831d7a78f1068d4c8af94dea215b07f114" } typenum = "1.15.0" [dev-dependencies] diff --git a/src/many-ledger/src/main.rs b/src/many-ledger/src/main.rs index 77e07698..2124232a 100644 --- a/src/many-ledger/src/main.rs +++ b/src/many-ledger/src/main.rs @@ -8,6 +8,7 @@ use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tracing::debug; use tracing::level_filters::LevelFilter; +use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; mod error; mod json; @@ -94,7 +95,17 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let identity = std::ffi::CStr::from_bytes_with_nul(b"many-ledger\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + tracing::subscriber::set_global_default( + tracing_subscriber::fmt::Subscriber::builder() + .with_max_level(log_level) + .with_writer(syslog) + .finish() + .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), + ) + .expect("Unable to set global tracing subscriber"); debug!("{:?}", Opts::parse()); From 0b3bbba243e3c53877f9ab75476528f45da059fd Mon Sep 17 00:00:00 2001 From: "Felix C. Morency" <1102868+fmorency@users.noreply.github.com> Date: Fri, 27 May 2022 11:11:36 -0400 Subject: [PATCH 2/4] cargo fmt and import fix --- src/http_proxy/src/main.rs | 2 +- src/kvstore/src/main.rs | 2 +- src/ledger/src/main.rs | 2 +- src/many-abci/src/main.rs | 2 +- src/many-kvstore/src/main.rs | 2 +- src/many-ledger/src/main.rs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/http_proxy/src/main.rs b/src/http_proxy/src/main.rs index 62be6f53..85513abf 100644 --- a/src/http_proxy/src/main.rs +++ b/src/http_proxy/src/main.rs @@ -3,12 +3,12 @@ use many::server::module::kvstore::{GetArgs, GetReturns}; use many::types::identity::cose::CoseKeyIdentity; use many::Identity; use many_client::ManyClient; -use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::net::SocketAddr; use std::path::PathBuf; use tiny_http::{Header, Method, Response, StatusCode}; use tracing::warn; use tracing_subscriber::filter::LevelFilter; +use tracing_subscriber::layer::SubscriberExt; #[derive(Parser)] struct Opts { diff --git a/src/kvstore/src/main.rs b/src/kvstore/src/main.rs index b89d366f..add17d76 100644 --- a/src/kvstore/src/main.rs +++ b/src/kvstore/src/main.rs @@ -4,11 +4,11 @@ use many::server::module::r#async; use many::types::identity::cose::CoseKeyIdentity; use many::{Identity, ManyError}; use many_client::ManyClient; -use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::io::Read; use std::path::PathBuf; use tracing::{error, trace}; use tracing_subscriber::filter::LevelFilter; +use tracing_subscriber::layer::SubscriberExt; #[derive(Parser)] struct Opts { diff --git a/src/ledger/src/main.rs b/src/ledger/src/main.rs index d6a1fc89..12adf6a7 100644 --- a/src/ledger/src/main.rs +++ b/src/ledger/src/main.rs @@ -14,7 +14,7 @@ use minicbor::{Decoder, Encoder}; use num_bigint::BigUint; use tracing::{debug, error, info, trace}; use tracing_subscriber::filter::LevelFilter; -use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; +use tracing_subscriber::layer::SubscriberExt; use std::collections::BTreeMap; use std::fmt::{Display, Formatter}; diff --git a/src/many-abci/src/main.rs b/src/many-abci/src/main.rs index c4dec7c6..069ec519 100644 --- a/src/many-abci/src/main.rs +++ b/src/many-abci/src/main.rs @@ -4,13 +4,13 @@ use many::server::ManyUrl; use many::types::identity::cose::CoseKeyIdentity; use many::{Identity, ManyServer}; use many_client::ManyClient; -use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tendermint_abci::ServerBuilder; use tendermint_rpc::Client; use tracing::{debug, error, info, trace}; use tracing_subscriber::filter::LevelFilter; +use tracing_subscriber::layer::SubscriberExt; mod abci_app; mod many_app; diff --git a/src/many-kvstore/src/main.rs b/src/many-kvstore/src/main.rs index 37246377..8382944a 100644 --- a/src/many-kvstore/src/main.rs +++ b/src/many-kvstore/src/main.rs @@ -3,10 +3,10 @@ use many::server::module::{abci_backend, kvstore}; use many::server::ManyServer; use many::transport::http::HttpServer; use many::types::identity::cose::CoseKeyIdentity; -use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tracing::level_filters::LevelFilter; +use tracing_subscriber::layer::SubscriberExt; mod error; mod module; diff --git a/src/many-ledger/src/main.rs b/src/many-ledger/src/main.rs index 2124232a..8b57422c 100644 --- a/src/many-ledger/src/main.rs +++ b/src/many-ledger/src/main.rs @@ -8,7 +8,7 @@ use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tracing::debug; use tracing::level_filters::LevelFilter; -use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; +use tracing_subscriber::layer::SubscriberExt; mod error; mod json; From d2bb4037c286787ec24b6cf22c8e70347fb13e07 Mon Sep 17 00:00:00 2001 From: "Felix C. Morency" <1102868+fmorency@users.noreply.github.com> Date: Fri, 27 May 2022 14:53:24 -0400 Subject: [PATCH 3/4] Add logmode flag --- src/http_proxy/src/main.rs | 40 +++++++++++++++++++++++++----------- src/kvstore/src/main.rs | 39 ++++++++++++++++++++++++----------- src/ledger/src/main.rs | 39 ++++++++++++++++++++++++----------- src/many-abci/src/main.rs | 39 ++++++++++++++++++++++++----------- src/many-kvstore/src/main.rs | 39 ++++++++++++++++++++++++----------- src/many-ledger/src/main.rs | 39 ++++++++++++++++++++++++----------- 6 files changed, 163 insertions(+), 72 deletions(-) diff --git a/src/http_proxy/src/main.rs b/src/http_proxy/src/main.rs index 85513abf..12c294b8 100644 --- a/src/http_proxy/src/main.rs +++ b/src/http_proxy/src/main.rs @@ -8,7 +8,12 @@ use std::path::PathBuf; use tiny_http::{Header, Method, Response, StatusCode}; use tracing::warn; use tracing_subscriber::filter::LevelFilter; -use tracing_subscriber::layer::SubscriberExt; + +#[derive(clap::ArgEnum, Clone)] +enum LogStrategy { + Terminal, + Syslog, +} #[derive(Parser)] struct Opts { @@ -34,6 +39,10 @@ struct Opts { /// Suppress all output logging. Can be used multiple times to suppress more. #[clap(short, long, parse(from_occurrences))] quiet: i8, + + /// Use given logging strategy + #[clap(long, arg_enum, default_value_t = LogStrategy::Terminal)] + logmode: LogStrategy, } fn main() { @@ -44,6 +53,7 @@ fn main() { server_id, verbose, quiet, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -56,17 +66,23 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - let identity = std::ffi::CStr::from_bytes_with_nul(b"http_proxy\0").unwrap(); - let (options, facility) = Default::default(); - let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); - tracing::subscriber::set_global_default( - tracing_subscriber::fmt::Subscriber::builder() - .with_max_level(log_level) - .with_writer(syslog) - .finish() - .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), - ) - .expect("Unable to set global tracing subscriber"); + + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stdout); + subscriber.init(); + } + LogStrategy::Syslog => { + let identity = std::ffi::CStr::from_bytes_with_nul(b"http_proxy\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + + let subscriber = subscriber.with_writer(syslog); + subscriber.init(); + } + }; let server_id = server_id.unwrap_or_default(); let key = pem.map_or_else(CoseKeyIdentity::anonymous, |p| { diff --git a/src/kvstore/src/main.rs b/src/kvstore/src/main.rs index add17d76..fbcf465d 100644 --- a/src/kvstore/src/main.rs +++ b/src/kvstore/src/main.rs @@ -8,7 +8,12 @@ use std::io::Read; use std::path::PathBuf; use tracing::{error, trace}; use tracing_subscriber::filter::LevelFilter; -use tracing_subscriber::layer::SubscriberExt; + +#[derive(clap::ArgEnum, Clone, Debug)] +enum LogStrategy { + Terminal, + Syslog, +} #[derive(Parser)] struct Opts { @@ -31,6 +36,10 @@ struct Opts { #[clap(short, long, parse(from_occurrences))] quiet: i8, + /// Use given logging strategy + #[clap(long, arg_enum, default_value_t = LogStrategy::Terminal)] + logmode: LogStrategy, + #[clap(subcommand)] subcommand: SubCommand, } @@ -132,6 +141,7 @@ fn main() { subcommand, verbose, quiet, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -144,17 +154,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - let identity = std::ffi::CStr::from_bytes_with_nul(b"kvstore\0").unwrap(); - let (options, facility) = Default::default(); - let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); - tracing::subscriber::set_global_default( - tracing_subscriber::fmt::Subscriber::builder() - .with_max_level(log_level) - .with_writer(syslog) - .finish() - .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), - ) - .expect("Unable to set global tracing subscriber"); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stdout); + subscriber.init(); + } + LogStrategy::Syslog => { + let identity = std::ffi::CStr::from_bytes_with_nul(b"kvstore\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + + let subscriber = subscriber.with_writer(syslog); + subscriber.init(); + } + }; let server_id = server_id.unwrap_or_default(); let key = pem.map_or_else(CoseKeyIdentity::anonymous, |p| { diff --git a/src/ledger/src/main.rs b/src/ledger/src/main.rs index 12adf6a7..02d5bcf2 100644 --- a/src/ledger/src/main.rs +++ b/src/ledger/src/main.rs @@ -14,7 +14,6 @@ use minicbor::{Decoder, Encoder}; use num_bigint::BigUint; use tracing::{debug, error, info, trace}; use tracing_subscriber::filter::LevelFilter; -use tracing_subscriber::layer::SubscriberExt; use std::collections::BTreeMap; use std::fmt::{Display, Formatter}; @@ -24,6 +23,12 @@ use std::time::Duration; mod multisig; +#[derive(clap::ArgEnum, Clone, Debug)] +enum LogStrategy { + Terminal, + Syslog, +} + #[derive(Clone, Debug)] #[repr(transparent)] struct Amount(pub BigUint); @@ -91,6 +96,10 @@ struct Opts { #[clap(short, long, parse(from_occurrences))] quiet: i8, + /// Use given logging strategy + #[clap(long, arg_enum, default_value_t = LogStrategy::Terminal)] + logmode: LogStrategy, + #[clap(subcommand)] subcommand: SubCommand, } @@ -303,6 +312,7 @@ fn main() { subcommand, verbose, quiet, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -315,17 +325,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - let identity = std::ffi::CStr::from_bytes_with_nul(b"ledger\0").unwrap(); - let (options, facility) = Default::default(); - let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); - tracing::subscriber::set_global_default( - tracing_subscriber::fmt::Subscriber::builder() - .with_max_level(log_level) - .with_writer(syslog) - .finish() - .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), - ) - .expect("Unable to set global tracing subscriber"); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stdout); + subscriber.init(); + } + LogStrategy::Syslog => { + let identity = std::ffi::CStr::from_bytes_with_nul(b"ledger\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + + let subscriber = subscriber.with_writer(syslog); + subscriber.init(); + } + }; let server_id = server_id.unwrap_or_default(); let key = if let (Some(module), Some(slot), Some(keyid)) = (module, slot, keyid) { diff --git a/src/many-abci/src/main.rs b/src/many-abci/src/main.rs index 069ec519..3fee1c4a 100644 --- a/src/many-abci/src/main.rs +++ b/src/many-abci/src/main.rs @@ -10,7 +10,6 @@ use tendermint_abci::ServerBuilder; use tendermint_rpc::Client; use tracing::{debug, error, info, trace}; use tracing_subscriber::filter::LevelFilter; -use tracing_subscriber::layer::SubscriberExt; mod abci_app; mod many_app; @@ -20,6 +19,12 @@ use abci_app::AbciApp; use many_app::AbciModuleMany; use module::AbciBlockchainModuleImpl; +#[derive(clap::ArgEnum, Clone, Debug)] +enum LogStrategy { + Terminal, + Syslog, +} + #[derive(Parser)] struct Opts { /// Address and port to bind the ABCI server to. @@ -59,6 +64,10 @@ struct Opts { /// Multiple occurences of this argument can be given. #[clap(long)] allow_origin: Option>, + + /// Use given logging strategy + #[clap(long, arg_enum, default_value_t = LogStrategy::Terminal)] + logmode: LogStrategy, } #[tokio::main] @@ -73,6 +82,7 @@ async fn main() { verbose, quiet, allow_origin, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -85,17 +95,22 @@ async fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - let identity = std::ffi::CStr::from_bytes_with_nul(b"many-abci\0").unwrap(); - let (options, facility) = Default::default(); - let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); - tracing::subscriber::set_global_default( - tracing_subscriber::fmt::Subscriber::builder() - .with_max_level(log_level) - .with_writer(syslog) - .finish() - .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), - ) - .expect("Unable to set global tracing subscriber"); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stdout); + subscriber.init(); + } + LogStrategy::Syslog => { + let identity = std::ffi::CStr::from_bytes_with_nul(b"many-abci\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + + let subscriber = subscriber.with_writer(syslog); + subscriber.init(); + } + }; // Try to get the status of the backend MANY app. let many_client = ManyClient::new( diff --git a/src/many-kvstore/src/main.rs b/src/many-kvstore/src/main.rs index 8382944a..078d9203 100644 --- a/src/many-kvstore/src/main.rs +++ b/src/many-kvstore/src/main.rs @@ -6,7 +6,6 @@ use many::types::identity::cose::CoseKeyIdentity; use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tracing::level_filters::LevelFilter; -use tracing_subscriber::layer::SubscriberExt; mod error; mod module; @@ -14,6 +13,12 @@ mod storage; use module::*; +#[derive(clap::ArgEnum, Clone, Debug)] +enum LogStrategy { + Terminal, + Syslog, +} + #[derive(Parser)] struct Opts { /// Increase output logging verbosity to DEBUG level. @@ -48,6 +53,10 @@ struct Opts { /// If this is not specified the initial state will not be used. #[clap(long, short)] clean: bool, + + /// Use given logging strategy + #[clap(long, arg_enum, default_value_t = LogStrategy::Terminal)] + logmode: LogStrategy, } fn main() { @@ -60,6 +69,7 @@ fn main() { mut state, persistent, clean, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -72,17 +82,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - let identity = std::ffi::CStr::from_bytes_with_nul(b"many-kvstore\0").unwrap(); - let (options, facility) = Default::default(); - let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); - tracing::subscriber::set_global_default( - tracing_subscriber::fmt::Subscriber::builder() - .with_max_level(log_level) - .with_writer(syslog) - .finish() - .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), - ) - .expect("Unable to set global tracing subscriber"); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stdout); + subscriber.init(); + } + LogStrategy::Syslog => { + let identity = std::ffi::CStr::from_bytes_with_nul(b"many-kvstore\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + + let subscriber = subscriber.with_writer(syslog); + subscriber.init(); + } + }; if clean { // Delete the persistent storage. diff --git a/src/many-ledger/src/main.rs b/src/many-ledger/src/main.rs index 8b57422c..a3596297 100644 --- a/src/many-ledger/src/main.rs +++ b/src/many-ledger/src/main.rs @@ -8,7 +8,6 @@ use std::path::PathBuf; use std::sync::{Arc, Mutex}; use tracing::debug; use tracing::level_filters::LevelFilter; -use tracing_subscriber::layer::SubscriberExt; mod error; mod json; @@ -18,6 +17,12 @@ mod storage; use crate::json::InitialStateJson; use module::*; +#[derive(clap::ArgEnum, Clone, Debug)] +enum LogStrategy { + Terminal, + Syslog, +} + #[derive(Parser, Debug)] #[clap(args_override_self(true))] struct Opts { @@ -69,6 +74,10 @@ struct Opts { #[cfg(feature = "balance_testing")] #[clap(long)] balance_only_for_testing: Option>, + + /// Use given logging strategy + #[clap(long, arg_enum, default_value_t = LogStrategy::Terminal)] + logmode: LogStrategy, } fn main() { @@ -82,6 +91,7 @@ fn main() { persistent, clean, allow_origin, + logmode, .. } = Opts::parse(); @@ -95,17 +105,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - let identity = std::ffi::CStr::from_bytes_with_nul(b"many-ledger\0").unwrap(); - let (options, facility) = Default::default(); - let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); - tracing::subscriber::set_global_default( - tracing_subscriber::fmt::Subscriber::builder() - .with_max_level(log_level) - .with_writer(syslog) - .finish() - .with(tracing_subscriber::fmt::Layer::default().with_writer(std::io::stdout)), - ) - .expect("Unable to set global tracing subscriber"); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stdout); + subscriber.init(); + } + LogStrategy::Syslog => { + let identity = std::ffi::CStr::from_bytes_with_nul(b"many-ledger\0").unwrap(); + let (options, facility) = Default::default(); + let syslog = tracing_syslog::Syslog::new(identity, options, facility).unwrap(); + + let subscriber = subscriber.with_writer(syslog); + subscriber.init(); + } + }; debug!("{:?}", Opts::parse()); From 02b54c24e6f9064c0e1f3b825826d3bf47c0a7f5 Mon Sep 17 00:00:00 2001 From: "Felix C. Morency" <1102868+fmorency@users.noreply.github.com> Date: Fri, 27 May 2022 14:59:41 -0400 Subject: [PATCH 4/4] Use stderr instead of stdout for tracing --- src/http_proxy/src/main.rs | 2 +- src/kvstore/src/main.rs | 2 +- src/ledger/src/main.rs | 2 +- src/many-abci/src/main.rs | 2 +- src/many-kvstore/src/main.rs | 2 +- src/many-ledger/src/main.rs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/http_proxy/src/main.rs b/src/http_proxy/src/main.rs index 12c294b8..8c108663 100644 --- a/src/http_proxy/src/main.rs +++ b/src/http_proxy/src/main.rs @@ -71,7 +71,7 @@ fn main() { match logmode { LogStrategy::Terminal => { - let subscriber = subscriber.with_writer(std::io::stdout); + let subscriber = subscriber.with_writer(std::io::stderr); subscriber.init(); } LogStrategy::Syslog => { diff --git a/src/kvstore/src/main.rs b/src/kvstore/src/main.rs index fbcf465d..24b8fad6 100644 --- a/src/kvstore/src/main.rs +++ b/src/kvstore/src/main.rs @@ -158,7 +158,7 @@ fn main() { match logmode { LogStrategy::Terminal => { - let subscriber = subscriber.with_writer(std::io::stdout); + let subscriber = subscriber.with_writer(std::io::stderr); subscriber.init(); } LogStrategy::Syslog => { diff --git a/src/ledger/src/main.rs b/src/ledger/src/main.rs index 02d5bcf2..236997a6 100644 --- a/src/ledger/src/main.rs +++ b/src/ledger/src/main.rs @@ -329,7 +329,7 @@ fn main() { match logmode { LogStrategy::Terminal => { - let subscriber = subscriber.with_writer(std::io::stdout); + let subscriber = subscriber.with_writer(std::io::stderr); subscriber.init(); } LogStrategy::Syslog => { diff --git a/src/many-abci/src/main.rs b/src/many-abci/src/main.rs index 3fee1c4a..e14d1feb 100644 --- a/src/many-abci/src/main.rs +++ b/src/many-abci/src/main.rs @@ -99,7 +99,7 @@ async fn main() { match logmode { LogStrategy::Terminal => { - let subscriber = subscriber.with_writer(std::io::stdout); + let subscriber = subscriber.with_writer(std::io::stderr); subscriber.init(); } LogStrategy::Syslog => { diff --git a/src/many-kvstore/src/main.rs b/src/many-kvstore/src/main.rs index 078d9203..29b3b0b9 100644 --- a/src/many-kvstore/src/main.rs +++ b/src/many-kvstore/src/main.rs @@ -86,7 +86,7 @@ fn main() { match logmode { LogStrategy::Terminal => { - let subscriber = subscriber.with_writer(std::io::stdout); + let subscriber = subscriber.with_writer(std::io::stderr); subscriber.init(); } LogStrategy::Syslog => { diff --git a/src/many-ledger/src/main.rs b/src/many-ledger/src/main.rs index a3596297..8fac4249 100644 --- a/src/many-ledger/src/main.rs +++ b/src/many-ledger/src/main.rs @@ -109,7 +109,7 @@ fn main() { match logmode { LogStrategy::Terminal => { - let subscriber = subscriber.with_writer(std::io::stdout); + let subscriber = subscriber.with_writer(std::io::stderr); subscriber.init(); } LogStrategy::Syslog => {