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,