diff --git a/src/core/log/capture/data.rs b/src/core/log/capture/data.rs index ea104f571091a1494b6ea0e926b4c92e172ec6a4..3f92101d2be172a5a45a4ee713019dd3e93323b0 100644 --- a/src/core/log/capture/data.rs +++ b/src/core/log/capture/data.rs @@ -1,9 +1,10 @@ use tracing::Level; use tracing_core::{span::Current, Event}; -use super::layer::Value; +use super::{layer::Value, Layer}; pub struct Data<'a> { + pub layer: &'a Layer, pub event: &'a Event<'a>, pub current: &'a Current, pub values: Option<&'a mut [Value]>, diff --git a/src/core/log/capture/layer.rs b/src/core/log/capture/layer.rs index 48b125daf9bb1f5debb3000d1cc229ed96e40238..19d76771c672eca6e356ddd95c11d637463c973b 100644 --- a/src/core/log/capture/layer.rs +++ b/src/core/log/capture/layer.rs @@ -40,12 +40,12 @@ fn on_event(&self, event: &Event<'_>, ctx: Context<'_, S>) { .read() .expect("shared lock") .iter() - .filter(|capture| filter(capture, event, &ctx)) - .for_each(|capture| handle(capture, event, &ctx)); + .filter(|capture| filter(self, capture, event, &ctx)) + .for_each(|capture| handle(self, capture, event, &ctx)); } } -fn handle<S>(capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>) +fn handle<S>(layer: &Layer, capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>) where S: Subscriber + for<'a> LookupSpan<'a>, { @@ -56,18 +56,20 @@ fn handle<S>(capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>) let mut closure = capture.closure.lock().expect("exclusive lock"); closure(Data { + layer, event, current: &ctx.current_span(), values: Some(&mut visitor.values), }); } -fn filter<S>(capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>) -> bool +fn filter<S>(layer: &Layer, capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>) -> bool where S: Subscriber + for<'a> LookupSpan<'a>, { capture.filter.as_ref().map_or(true, |filter| { filter(Data { + layer, event, current: &ctx.current_span(), values: None,