From d9054f5364f78d6ca7c46af88d5a922fcdfb4d77 Mon Sep 17 00:00:00 2001 From: Jason Volk <jason@zemos.net> Date: Fri, 14 Jun 2024 17:53:40 +0000 Subject: [PATCH] add backreference to layer in capture data struct Signed-off-by: Jason Volk <jason@zemos.net> --- src/core/log/capture/data.rs | 3 ++- src/core/log/capture/layer.rs | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/core/log/capture/data.rs b/src/core/log/capture/data.rs index ea104f571..3f92101d2 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 48b125daf..19d76771c 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, -- GitLab