diff --git a/Cargo.lock b/Cargo.lock index 763f4358..01778ff8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4534,6 +4534,16 @@ 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.3.17" @@ -4541,11 +4551,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "nu-ansi-term", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] diff --git a/chirpstack/Cargo.toml b/chirpstack/Cargo.toml index 339617c7..03ef2ecf 100644 --- a/chirpstack/Cargo.toml +++ b/chirpstack/Cargo.toml @@ -42,6 +42,7 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = [ "fmt", "ansi", + "json", ], default-features = true } # ChirpStack API definitions diff --git a/chirpstack/src/cmd/configfile.rs b/chirpstack/src/cmd/configfile.rs index 25c4fc75..6ed645b8 100644 --- a/chirpstack/src/cmd/configfile.rs +++ b/chirpstack/src/cmd/configfile.rs @@ -4,6 +4,23 @@ use super::super::config; pub fn run() { let template = r#" +# Logging configuration +[logging] + + # Log level. + # + # Valid options are: + # * TRACE + # * DEBUG + # * INFO + # * WARN + # * ERROR + # * OFF + level="{{ logging.level }}" + + # Log as JSON. + json={{ logging.json }} + # PostgreSQL configuration. [postgresql] diff --git a/chirpstack/src/config.rs b/chirpstack/src/config.rs index 5daaa1b3..3d222381 100644 --- a/chirpstack/src/config.rs +++ b/chirpstack/src/config.rs @@ -37,12 +37,14 @@ pub struct Configuration { #[serde(default)] pub struct Logging { pub level: String, + pub json: bool, } impl Default for Logging { fn default() -> Self { Logging { level: "info".into(), + json: false, } } } diff --git a/chirpstack/src/main.rs b/chirpstack/src/main.rs index 0b96a162..139567e1 100644 --- a/chirpstack/src/main.rs +++ b/chirpstack/src/main.rs @@ -92,10 +92,17 @@ async fn main() -> Result<()> { ("lrwn", Level::from_str(&conf.logging.level).unwrap()), ]); - tracing_subscriber::registry() - .with(tracing_subscriber::fmt::layer()) - .with(filter) - .init(); + if conf.logging.json { + tracing_subscriber::registry() + .with(tracing_subscriber::fmt::layer().json()) + .with(filter) + .init(); + } else { + tracing_subscriber::registry() + .with(tracing_subscriber::fmt::layer()) + .with(filter) + .init(); + } if let Some(Commands::Configfile {}) = &cli.command { cmd::configfile::run();