]> Untitled Git - lemmy.git/blob - src/lib.rs
Merge remote-tracking branch 'lemmynet/fix_sitemetadata_test' into asonix/console...
[lemmy.git] / src / lib.rs
1 #![recursion_limit = "512"]
2 pub mod api_routes;
3 pub mod code_migrations;
4 pub mod root_span_builder;
5 pub mod scheduled_tasks;
6
7 #[cfg(feature = "console")]
8 use console_subscriber::ConsoleLayer;
9 use lemmy_utils::LemmyError;
10 use opentelemetry::{
11   sdk::{propagation::TraceContextPropagator, Resource},
12   KeyValue,
13 };
14 use opentelemetry_otlp::WithExportConfig;
15 use tracing::subscriber::set_global_default;
16 use tracing_error::ErrorLayer;
17 use tracing_log::LogTracer;
18 use tracing_subscriber::{filter::Targets, layer::SubscriberExt, Layer, Registry};
19
20 pub fn init_tracing(opentelemetry_url: Option<&str>) -> Result<(), LemmyError> {
21   LogTracer::init()?;
22
23   opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new());
24
25   let log_description = std::env::var("RUST_LOG").unwrap_or_else(|_| "info".into());
26
27   let targets = log_description
28     .trim()
29     .trim_matches('"')
30     .parse::<Targets>()?;
31
32   let format_layer = tracing_subscriber::fmt::layer().with_filter(targets.clone());
33
34   #[cfg(feature = "console")]
35   let console_layer = ConsoleLayer::builder()
36     .with_default_env()
37     .server_addr(([0, 0, 0, 0], 6669))
38     .event_buffer_capacity(1024 * 1024)
39     .spawn();
40
41   let subscriber = Registry::default()
42     .with(format_layer)
43     .with(ErrorLayer::default());
44
45   #[cfg(feature = "console")]
46   let subscriber = subscriber.with(console_layer);
47
48   if let Some(url) = opentelemetry_url {
49     let tracer = opentelemetry_otlp::new_pipeline()
50       .tracing()
51       .with_trace_config(
52         opentelemetry::sdk::trace::config()
53           .with_resource(Resource::new(vec![KeyValue::new("service.name", "lemmy")])),
54       )
55       .with_exporter(
56         opentelemetry_otlp::new_exporter()
57           .tonic()
58           .with_endpoint(url),
59       )
60       .install_batch(opentelemetry::runtime::Tokio)?;
61
62     let otel_layer = tracing_opentelemetry::layer()
63       .with_tracer(tracer)
64       .with_filter(targets);
65
66     let subscriber = subscriber.with(otel_layer);
67
68     set_global_default(subscriber)?;
69   } else {
70     set_global_default(subscriber)?;
71   }
72
73   Ok(())
74 }