1mod message_layer;
2use message_layer::MessageLayer;
3
4use std::io;
5use std::time::Duration;
6use tokio::time::sleep;
7use tracing::Subscriber;
8use tracing::metadata::LevelFilter;
9use tracing_subscriber::filter::filter_fn;
10use tracing_subscriber::layer::{Filter, SubscriberExt};
11use tracing_subscriber::registry::LookupSpan;
12use tracing_subscriber::util::SubscriberInitExt;
13use tracing_subscriber::{EnvFilter, Layer, Registry};
14
15pub fn init() {
16 Registry::default().with(stdout_layer()).init();
17}
18
19pub async fn wait_to_export() {
21 sleep(duration()).await
22}
23
24pub(crate) fn duration() -> Duration {
25 Duration::from_millis(100)
26}
27
28pub(crate) fn filter_non_otel<S>() -> impl Filter<S>
29where
30 S: Subscriber + for<'a> LookupSpan<'a>,
31{
32 filter_fn(|metadata| !metadata.target().starts_with("opentelemetry"))
33}
34
35pub(crate) fn stdout_layer<S>() -> impl Layer<S>
36where
37 S: Subscriber + for<'a> LookupSpan<'a>,
38{
39 let env_filter = EnvFilter::builder()
40 .with_default_directive(LevelFilter::INFO.into())
41 .from_env_lossy();
42
43 MessageLayer::new(io::stdout)
44 .with_filter(filter_non_otel())
45 .with_filter(env_filter)
46}