Line data Source code
1 : use tracing_opentelemetry::OpenTelemetryLayer;
2 : use tracing_subscriber::layer::SubscriberExt;
3 : use tracing_subscriber::prelude::*;
4 :
5 : /// Initialize logging to stderr, and OpenTelemetry tracing and exporter.
6 : ///
7 : /// Logging is configured using either `default_log_level` or
8 : /// `RUST_LOG` environment variable as default log level.
9 : ///
10 : /// OpenTelemetry is configured with OTLP/HTTP exporter. It picks up
11 : /// configuration from environment variables. For example, to change the destination,
12 : /// set `OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318`. See
13 : /// `tracing-utils` package description.
14 : ///
15 575 : pub fn init_tracing_and_logging(default_log_level: &str) -> anyhow::Result<()> {
16 575 : // Initialize Logging
17 575 : let env_filter = tracing_subscriber::EnvFilter::try_from_default_env()
18 575 : .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new(default_log_level));
19 575 :
20 575 : let fmt_layer = tracing_subscriber::fmt::layer()
21 575 : .with_ansi(false)
22 575 : .with_target(false)
23 575 : .with_writer(std::io::stderr);
24 575 :
25 575 : // Initialize OpenTelemetry
26 575 : let otlp_layer =
27 575 : tracing_utils::init_tracing_without_runtime("compute_ctl").map(OpenTelemetryLayer::new);
28 575 :
29 575 : // Put it all together
30 575 : tracing_subscriber::registry()
31 575 : .with(env_filter)
32 575 : .with(otlp_layer)
33 575 : .with(fmt_layer)
34 575 : .init();
35 575 : tracing::info!("logging and tracing started");
36 :
37 575 : utils::logging::replace_panic_hook_with_tracing_panic_hook().forget();
38 575 :
39 575 : Ok(())
40 575 : }
41 :
42 : /// Replace all newline characters with a special character to make it
43 : /// easier to grep for log messages.
44 8 : pub fn inlinify(s: &str) -> String {
45 8 : s.replace('\n', "\u{200B}")
46 8 : }
|