diff --git a/Cargo.lock b/Cargo.lock index e8220178..91b89421 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 0be18814..53083444 100644 --- a/src/http_proxy/Cargo.toml +++ b/src/http_proxy/Cargo.toml @@ -25,5 +25,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..8c108663 100644 --- a/src/http_proxy/src/main.rs +++ b/src/http_proxy/src/main.rs @@ -9,6 +9,12 @@ use tiny_http::{Header, Method, Response, StatusCode}; use tracing::warn; use tracing_subscriber::filter::LevelFilter; +#[derive(clap::ArgEnum, Clone)] +enum LogStrategy { + Terminal, + Syslog, +} + #[derive(Parser)] struct Opts { /// Many server URL to connect to. It must implement a KV-Store attribute. @@ -33,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() { @@ -43,6 +53,7 @@ fn main() { server_id, verbose, quiet, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -55,7 +66,23 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stderr); + 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/Cargo.toml b/src/kvstore/Cargo.toml index 004781ce..1ba41c42 100644 --- a/src/kvstore/Cargo.toml +++ b/src/kvstore/Cargo.toml @@ -23,5 +23,6 @@ many = { git = "https://github.com/liftedinit/many-rs.git", rev = "c80f6314957bc many-client = { git = "https://github.com/liftedinit/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..24b8fad6 100644 --- a/src/kvstore/src/main.rs +++ b/src/kvstore/src/main.rs @@ -9,6 +9,12 @@ use std::path::PathBuf; use tracing::{error, trace}; use tracing_subscriber::filter::LevelFilter; +#[derive(clap::ArgEnum, Clone, Debug)] +enum LogStrategy { + Terminal, + Syslog, +} + #[derive(Parser)] struct Opts { /// Many server URL to connect to. @@ -30,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, } @@ -131,6 +141,7 @@ fn main() { subcommand, verbose, quiet, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -143,7 +154,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stderr); + 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/Cargo.toml b/src/ledger/Cargo.toml index 1ee67fdc..2eff6d90 100644 --- a/src/ledger/Cargo.toml +++ b/src/ledger/Cargo.toml @@ -32,5 +32,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..236997a6 100644 --- a/src/ledger/src/main.rs +++ b/src/ledger/src/main.rs @@ -23,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); @@ -90,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, } @@ -302,6 +312,7 @@ fn main() { subcommand, verbose, quiet, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -314,7 +325,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stderr); + 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/Cargo.toml b/src/many-abci/Cargo.toml index 8e2207ce..c9f9864c 100644 --- a/src/many-abci/Cargo.toml +++ b/src/many-abci/Cargo.toml @@ -35,4 +35,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..e14d1feb 100644 --- a/src/many-abci/src/main.rs +++ b/src/many-abci/src/main.rs @@ -19,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. @@ -58,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] @@ -72,6 +82,7 @@ async fn main() { verbose, quiet, allow_origin, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -84,7 +95,22 @@ async fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stderr); + 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/Cargo.toml b/src/many-kvstore/Cargo.toml index 25c441c7..db257fd4 100644 --- a/src/many-kvstore/Cargo.toml +++ b/src/many-kvstore/Cargo.toml @@ -31,4 +31,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..29b3b0b9 100644 --- a/src/many-kvstore/src/main.rs +++ b/src/many-kvstore/src/main.rs @@ -13,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. @@ -47,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() { @@ -59,6 +69,7 @@ fn main() { mut state, persistent, clean, + logmode, } = Opts::parse(); let verbose_level = 2 + verbose - quiet; @@ -71,7 +82,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stderr); + 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/Cargo.toml b/src/many-ledger/Cargo.toml index 2b80fd1d..17d69f0a 100644 --- a/src/many-ledger/Cargo.toml +++ b/src/many-ledger/Cargo.toml @@ -38,7 +38,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..8fac4249 100644 --- a/src/many-ledger/src/main.rs +++ b/src/many-ledger/src/main.rs @@ -17,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 { @@ -68,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() { @@ -81,6 +91,7 @@ fn main() { persistent, clean, allow_origin, + logmode, .. } = Opts::parse(); @@ -94,7 +105,22 @@ fn main() { x if x < 0 => LevelFilter::OFF, _ => unreachable!(), }; - tracing_subscriber::fmt().with_max_level(log_level).init(); + let subscriber = tracing_subscriber::fmt::Subscriber::builder().with_max_level(log_level); + + match logmode { + LogStrategy::Terminal => { + let subscriber = subscriber.with_writer(std::io::stderr); + 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());