From 9e1515d14434c93c612e20b7fdd81131cb16a55f Mon Sep 17 00:00:00 2001 From: Daniel Correia Date: Thu, 14 Sep 2023 08:16:42 +0100 Subject: [PATCH] Add support for constant attributes. Update example to reflect changes. --- examples/examples/hyper.rs | 8 +++++++- tracing-logstash/src/logstash.rs | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/examples/examples/hyper.rs b/examples/examples/hyper.rs index f741450..a0ae36f 100644 --- a/examples/examples/hyper.rs +++ b/examples/examples/hyper.rs @@ -24,7 +24,13 @@ async fn shutdown_signal() { #[tokio::main] async fn main() { - let logger = tracing_logstash::Layer::default(); + let logger = tracing_logstash::Layer::default() + .event_format(tracing_logstash::logstash::LogstashFormat::default() + .with_constants(vec![ + ("service.name", "tracing-logstash".to_owned()), + ("service.environment", "development".to_owned()), + ]) + ); let env_filter = EnvFilter::try_from_default_env() .or_else(|_| EnvFilter::try_new("info")) diff --git a/tracing-logstash/src/logstash.rs b/tracing-logstash/src/logstash.rs index 3b1e74d..46053cb 100644 --- a/tracing-logstash/src/logstash.rs +++ b/tracing-logstash/src/logstash.rs @@ -25,6 +25,7 @@ pub struct LogstashFormat { display_stack_trace: Option<(DisplayLevelFilter, DisplayLevelFilter)>, span_format: SF, span_fields: Arc, + constants: Vec<(&'static str, String)>, } const fn level_value(level: &Level) -> u64 { @@ -89,12 +90,18 @@ impl LogstashFormat { ..self } } + pub fn with_span_fields(self, span_fields: Vec) -> Self { Self { span_fields: Arc::new(FieldConfig::new(span_fields)), ..self } } + + pub fn with_constants(self, constants: Vec<(&'static str, String)>) -> Self { + Self { constants, ..self } + } + pub fn span_format(self, span_format: FS2) -> LogstashFormat { LogstashFormat { display_version: self.display_version, @@ -107,6 +114,7 @@ impl LogstashFormat { display_span_list: self.display_span_list, span_format, span_fields: self.span_fields, + constants: self.constants, } } } @@ -124,6 +132,7 @@ impl Default for LogstashFormat { display_span_list: None, span_format: Default::default(), span_fields: Default::default(), + constants: Default::default(), } } } @@ -258,6 +267,10 @@ where } } + for (key, value) in &self.constants { + field_visitor.serialize_field(key, value); + } + if let Some(filter) = self.display_span_list { field_visitor.serialize_field( "spans",