Skip to content

Commit a5c3995

Browse files
committed
fixup! fixup! fixup! fixup! refactor(log): reimplement log using tracing
1 parent 48dfb19 commit a5c3995

File tree

4 files changed

+56
-73
lines changed

4 files changed

+56
-73
lines changed

src/bin/rustup-init.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,15 @@ async fn maybe_trace_rustup() -> Result<utils::ExitCode> {
5656
use tracing_subscriber::{layer::SubscriberExt, Registry};
5757

5858
#[cfg(feature = "otel")]
59-
let telemetry = rustup::cli::log::telemetry()?;
59+
let telemetry = {
60+
use rustup::cli::log::{telemetry, telemetry_default_tracer};
61+
62+
use opentelemetry::global;
63+
use opentelemetry_sdk::propagation::TraceContextPropagator;
64+
65+
global::set_text_map_propagator(TraceContextPropagator::new());
66+
telemetry(telemetry_default_tracer()?)
67+
};
6068
let console_logger = rustup::cli::log::console_logger(process());
6169
let subscriber = {
6270
#[cfg(feature = "otel")]

src/cli/log.rs

+13-12
Original file line numberDiff line numberDiff line change
@@ -69,23 +69,29 @@ where
6969
/// A [`tracing::Subscriber`] [`Layer`][`tracing_subscriber::Layer`] that corresponds to Rustup's
7070
/// optional `opentelemetry` (a.k.a. `otel`) feature.
7171
#[cfg(feature = "otel")]
72-
pub fn telemetry<S>() -> anyhow::Result<impl Layer<S>>
72+
pub fn telemetry<S>(tracer: opentelemetry_sdk::trace::Tracer) -> impl Layer<S>
7373
where
7474
S: Subscriber + for<'span> LookupSpan<'span>,
7575
{
76+
// NOTE: This reads from the real environment variables instead of `process().var_os()`.
77+
let env_filter = EnvFilter::try_from_default_env().unwrap_or(EnvFilter::new("INFO"));
78+
tracing_opentelemetry::layer()
79+
.with_tracer(tracer)
80+
.with_filter(env_filter)
81+
}
82+
83+
#[cfg(feature = "otel")]
84+
pub fn telemetry_default_tracer() -> anyhow::Result<opentelemetry_sdk::trace::Tracer> {
7685
use std::time::Duration;
7786

78-
use opentelemetry::{global, KeyValue};
87+
use opentelemetry::KeyValue;
7988
use opentelemetry_otlp::WithExportConfig;
8089
use opentelemetry_sdk::{
81-
propagation::TraceContextPropagator,
8290
trace::{self, Sampler},
8391
Resource,
8492
};
8593

86-
global::set_text_map_propagator(TraceContextPropagator::new());
87-
88-
let tracer = opentelemetry_otlp::new_pipeline()
94+
Ok(opentelemetry_otlp::new_pipeline()
8995
.tracing()
9096
.with_exporter(
9197
opentelemetry_otlp::new_exporter()
@@ -97,12 +103,7 @@ where
97103
.with_sampler(Sampler::AlwaysOn)
98104
.with_resource(Resource::new(vec![KeyValue::new("service.name", "rustup")])),
99105
)
100-
.install_batch(opentelemetry_sdk::runtime::Tokio)?;
101-
// NOTE: This reads from the real environment variables instead of `process().var_os()`.
102-
let env_filter = EnvFilter::try_from_default_env().unwrap_or(EnvFilter::new("INFO"));
103-
Ok(tracing_opentelemetry::layer()
104-
.with_tracer(tracer)
105-
.with_filter(env_filter))
106+
.install_batch(opentelemetry_sdk::runtime::Tokio)?)
106107
}
107108

108109
// Adapted from

src/currentprocess.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,17 @@ fn ensure_hook() {
165165
fn tracing_subscriber() -> impl tracing::Subscriber {
166166
use tracing_subscriber::{layer::SubscriberExt, Registry};
167167

168+
#[cfg(feature = "otel")]
169+
let telemetry = crate::cli::log::telemetry(crate::test::TRACER.clone());
168170
let console_logger = crate::cli::log::console_logger(process());
169-
170-
// TODO: What about the original otel logger?
171-
Registry::default().with(console_logger)
171+
#[cfg(feature = "otel")]
172+
{
173+
Registry::default().with(console_logger).with(telemetry)
174+
}
175+
#[cfg(not(feature = "otel"))]
176+
{
177+
Registry::default().with(console_logger)
178+
}
172179
}
173180

174181
/// Run a function in the context of a process definition and a tokio runtime.

src/test.rs

+24-57
Original file line numberDiff line numberDiff line change
@@ -238,70 +238,37 @@ type Tracer = opentelemetry_sdk::trace::Tracer;
238238
type Tracer = ();
239239

240240
/// A tracer for the tests.
241-
static TRACER: Lazy<Tracer> = Lazy::new(|| {
242-
use tokio::runtime::Handle;
241+
pub(crate) static TRACER: Lazy<Tracer> = Lazy::new(|| {
242+
#[cfg(feature = "otel")]
243+
{
244+
use tokio::runtime::Handle;
243245

244-
// Use the current runtime, or the sync test runtime otherwise.
245-
let handle = match Handle::try_current() {
246-
Ok(handle) => handle,
247-
Err(_) => TRACE_RUNTIME.handle().clone(),
248-
};
246+
// Use the current runtime, or the sync test runtime otherwise.
247+
let handle = match Handle::try_current() {
248+
Ok(handle) => handle,
249+
Err(_) => TRACE_RUNTIME.handle().clone(),
250+
};
249251

250-
let _guard = handle.enter();
252+
let _guard = handle.enter();
253+
254+
use crate::cli::log::{telemetry, telemetry_default_tracer};
251255

252-
#[cfg(feature = "otel")]
253-
let tracer = {
254-
use std::time::Duration;
255-
256-
use opentelemetry::KeyValue;
257-
use opentelemetry_otlp::WithExportConfig;
258-
use opentelemetry_sdk::{
259-
trace::{self, Sampler},
260-
Resource,
261-
};
262-
opentelemetry_otlp::new_pipeline()
263-
.tracing()
264-
.with_exporter(
265-
opentelemetry_otlp::new_exporter()
266-
.tonic()
267-
.with_timeout(Duration::from_secs(3)),
268-
)
269-
.with_trace_config(
270-
trace::config()
271-
.with_sampler(Sampler::AlwaysOn)
272-
.with_resource(Resource::new(vec![KeyValue::new("service.name", "rustup")])),
273-
)
274-
.install_batch(opentelemetry_sdk::runtime::Tokio)
275-
.unwrap()
276-
};
277-
#[cfg(feature = "otel")]
278-
let telemetry = {
279256
use opentelemetry::global;
280257
use opentelemetry_sdk::propagation::TraceContextPropagator;
281-
use tracing_subscriber::{EnvFilter, Layer};
258+
use tracing_subscriber::{layer::SubscriberExt as _, Registry};
282259

283260
global::set_text_map_propagator(TraceContextPropagator::new());
284-
285-
let env_filter = EnvFilter::try_from_default_env().unwrap_or(EnvFilter::new("INFO"));
286-
tracing_opentelemetry::layer()
287-
.with_tracer(tracer.clone())
288-
.with_filter(env_filter)
289-
};
290-
let subscriber = {
291-
use tracing_subscriber::Registry;
292-
#[cfg(feature = "otel")]
293-
{
294-
use tracing_subscriber::layer::SubscriberExt;
295-
Registry::default().with(telemetry)
296-
}
297-
#[cfg(not(feature = "otel"))]
298-
{
299-
Registry::default()
300-
}
301-
};
302-
tracing::subscriber::set_global_default(subscriber).unwrap();
303-
#[cfg(feature = "otel")]
304-
tracer
261+
let tracer = telemetry_default_tracer().unwrap();
262+
let telemetry = telemetry(tracer.clone());
263+
let subscriber = Registry::default().with(telemetry);
264+
tracing::subscriber::set_global_default(subscriber).unwrap();
265+
tracer
266+
}
267+
#[cfg(not(feature = "otel"))]
268+
{
269+
let subscriber = Registry::default();
270+
tracing::subscriber::set_global_default(subscriber).unwrap();
271+
}
305272
});
306273

307274
pub fn before_test() {

0 commit comments

Comments
 (0)