tracing_setup/
setup_and_buffered_subscriber.rs1crate::ix!();
2
3pub trait BufferedSubscriber: Subscriber + Flushable {}
4
5#[derive(Debug)]
6pub struct BufferedSubscriberLayer<S> {
7 inner: tracing_subscriber::layer::Layered<BufferedLayer, S>,
8 buffered_layer: Arc<BufferedLayer>,
9}
10
11impl<S: Subscriber> Flushable for BufferedSubscriberLayer<S> {
12
13 fn flush(&self) {
14 self.buffered_layer.flush();
15 }
16}
17
18impl<S: Subscriber> Subscriber for BufferedSubscriberLayer<S> {
19 fn enabled(&self, metadata: &tracing::Metadata<'_>) -> bool {
20 self.inner.enabled(metadata)
21 }
22
23 fn new_span(&self, span: &tracing::span::Attributes<'_>) -> tracing::Id {
24 self.inner.new_span(span)
25 }
26
27 fn record(&self, span: &tracing::Id, values: &tracing::span::Record<'_>) {
28 self.inner.record(span, values);
29 }
30
31 fn record_follows_from(&self, span: &tracing::Id, follows: &tracing::Id) {
32 self.inner.record_follows_from(span, follows);
33 }
34
35 fn event(&self, event: &tracing::Event<'_>) {
36 self.inner.event(event);
37 }
38
39 fn enter(&self, span: &tracing::Id) {
40 self.inner.enter(span);
41 }
42
43 fn exit(&self, span: &tracing::Id) {
44 self.inner.exit(span);
45 }
46}
47
48pub fn setup_default_buffered_tracing() -> Arc<BufferedSubscriberLayer<Registry>>
49{
50 setup_buffered_tracing(None, EventPrinter::default())
51}
52
53pub fn setup_buffered_tracing(
54 tag: Option<&str>,
55 printer: EventPrinter,
56) -> Arc<BufferedSubscriberLayer<Registry>>
57{
58 let mut layer = match tag {
59 Some(t) => BufferedLayer::new_with_tag(t),
60 None => BufferedLayer::default(),
61 };
62
63 layer.set_event_printer(printer);
65
66 let subscriber = Registry::default().with(layer.clone());
67
68 Arc::new(BufferedSubscriberLayer {
69 inner: subscriber,
70 buffered_layer: layer.into(),
71 })
72}