Skip to content

Commit 405c060

Browse files
committed
tracing-core,tracing-subscriber: add {Collect,Subscriber}::on_register_dispatch
The `on_register_dispatch` method is invoked when a `Collect` is registered as a `Dispatch`. This method should be overridden to perform actions upon the installation of a collector/subscriber; for instance, to send a copy of the collector's `Dispatch` to a worker thread.
1 parent 1b2a054 commit 405c060

File tree

7 files changed

+50
-7
lines changed

7 files changed

+50
-7
lines changed

tracing-core/src/callsite.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ mod inner {
232232
let mut dispatchers = REGISTRY.dispatchers.write().unwrap();
233233
let callsites = &REGISTRY.callsites;
234234

235+
dispatch.collector().on_register_dispatch(dispatch);
235236
dispatchers.push(dispatch.registrar());
236237

237238
rebuild_interest(callsites, &mut dispatchers);

tracing-core/src/collect.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//! Collectors collect and record trace data.
2-
use crate::{span, Event, LevelFilter, Metadata};
2+
use crate::{span, Dispatch, Event, LevelFilter, Metadata};
33

44
use core::any::{Any, TypeId};
55
use core::ptr::NonNull;
@@ -78,6 +78,12 @@ use core::ptr::NonNull;
7878
/// [`event`]: Collect::event
7979
/// [`event_enabled`]: Collect::event_enabled
8080
pub trait Collect: 'static {
81+
82+
/// Invoked when this collector becomes a [`Dispatch`].
83+
fn on_register_dispatch(&self, collector: &Dispatch) {
84+
let _ = collector;
85+
}
86+
8187
// === Span registry methods ==============================================
8288

8389
/// Registers a new [callsite] with this collector, returning whether or not

tracing-core/src/dispatch.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ impl Dispatch {
587587

588588
#[inline(always)]
589589
#[cfg(feature = "alloc")]
590-
fn collector(&self) -> &(dyn Collect + Send + Sync) {
590+
pub(crate) fn collector(&self) -> &(dyn Collect + Send + Sync) {
591591
match self.collector {
592592
Kind::Scoped(ref s) => Arc::deref(s),
593593
Kind::Global(s) => s,
@@ -596,7 +596,7 @@ impl Dispatch {
596596

597597
#[inline(always)]
598598
#[cfg(not(feature = "alloc"))]
599-
fn collector(&self) -> &(dyn Collect + Send + Sync) {
599+
pub(crate) fn collector(&self) -> &(dyn Collect + Send + Sync) {
600600
self.collector
601601
}
602602

tracing-subscriber/src/filter/subscriber_filters/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ use std::{
4444
};
4545
use tracing_core::{
4646
collect::{Collect, Interest},
47-
span, Event, Metadata,
47+
span, Dispatch, Event, Metadata,
4848
};
4949
pub mod combinator;
5050

@@ -603,6 +603,10 @@ where
603603
F: subscribe::Filter<C> + 'static,
604604
S: Subscribe<C>,
605605
{
606+
fn on_register_dispatch(&self, collector: &Dispatch) {
607+
self.subscriber.on_register_dispatch(collector);
608+
}
609+
606610
fn on_subscribe(&mut self, collector: &mut C) {
607611
self.id = MagicPsfDowncastMarker(collector.register_filter());
608612
self.subscriber.on_subscribe(collector);

tracing-subscriber/src/reload.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use std::{
3030
use tracing_core::{
3131
callsite,
3232
collect::{Collect, Interest},
33-
span, Event, LevelFilter, Metadata,
33+
span, Dispatch, Event, LevelFilter, Metadata,
3434
};
3535

3636
/// Wraps a `Filter` or `Subscribe`, allowing it to be reloaded dynamically at runtime.
@@ -71,6 +71,10 @@ where
7171
S: crate::Subscribe<C> + 'static,
7272
C: Collect,
7373
{
74+
fn on_register_dispatch(&self, collector: &Dispatch) {
75+
try_lock!(self.inner.read()).on_register_dispatch(collector);
76+
}
77+
7478
#[inline]
7579
fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest {
7680
try_lock!(self.inner.read(), else return Interest::sometimes()).register_callsite(metadata)

tracing-subscriber/src/subscribe/layered.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use tracing_core::{
22
collect::{Collect, Interest},
33
metadata::Metadata,
4-
span, Event, LevelFilter,
4+
span, Dispatch, Event, LevelFilter,
55
};
66

77
use crate::{
@@ -244,6 +244,11 @@ where
244244
B: Subscribe<C>,
245245
C: Collect,
246246
{
247+
fn on_register_dispatch(&self, collector: &Dispatch) {
248+
self.subscriber.on_register_dispatch(collector);
249+
self.inner.on_register_dispatch(collector);
250+
}
251+
247252
fn on_subscribe(&mut self, collect: &mut C) {
248253
self.subscriber.on_subscribe(collect);
249254
self.inner.on_subscribe(collect);

tracing-subscriber/src/subscribe/mod.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ use crate::filter;
682682
use tracing_core::{
683683
collect::{Collect, Interest},
684684
metadata::Metadata,
685-
span, Event, LevelFilter,
685+
span, Dispatch, Event, LevelFilter,
686686
};
687687

688688
use core::{any::TypeId, ptr::NonNull};
@@ -716,6 +716,14 @@ where
716716
C: Collect,
717717
Self: 'static,
718718
{
719+
/// Performs late initialization when installing this subscriber as a
720+
/// [collector].
721+
///
722+
/// [collector]: tracing_core::Collect
723+
fn on_register_dispatch(&self, collector: &Dispatch) {
724+
let _ = collector;
725+
}
726+
719727
/// Performs late initialization when attaching a subscriber to a
720728
/// [collector].
721729
///
@@ -1472,6 +1480,12 @@ where
14721480
S: Subscribe<C>,
14731481
C: Collect,
14741482
{
1483+
fn on_register_dispatch(&self, collector: &Dispatch) {
1484+
if let Some(ref subscriber) = self {
1485+
subscriber.on_register_dispatch(collector)
1486+
}
1487+
}
1488+
14751489
fn on_subscribe(&mut self, collector: &mut C) {
14761490
if let Some(ref mut subscriber) = self {
14771491
subscriber.on_subscribe(collector)
@@ -1584,6 +1598,10 @@ where
15841598
#[cfg(any(feature = "std", feature = "alloc"))]
15851599
macro_rules! subscriber_impl_body {
15861600
() => {
1601+
fn on_register_dispatch(&self, collector: &Dispatch) {
1602+
self.deref().on_register_dispatch(collector);
1603+
}
1604+
15871605
#[inline]
15881606
fn on_subscribe(&mut self, collect: &mut C) {
15891607
self.deref_mut().on_subscribe(collect);
@@ -1681,6 +1699,11 @@ feature! {
16811699
S: Subscribe<C>,
16821700
C: Collect,
16831701
{
1702+
fn on_register_dispatch(&self, collector: &Dispatch) {
1703+
for s in self {
1704+
s.on_register_dispatch(collector);
1705+
}
1706+
}
16841707

16851708
fn on_subscribe(&mut self, collector: &mut C) {
16861709
for s in self {

0 commit comments

Comments
 (0)