Skip to content

Commit 8c9babb

Browse files
authored
Minor additions to internal logs (#2330)
1 parent ebeeea1 commit 8c9babb

File tree

4 files changed

+46
-13
lines changed

4 files changed

+46
-13
lines changed

examples/self-diagnostics/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
2626
// OpenTelemetry uses `tracing` crate for its internal logging. Unless a
2727
// tracing subscriber is set, the logs will be discarded. In this example,
2828
// we configure a `tracing` subscriber to:
29-
// 1. Print logs of level INFO or higher to stdout.
29+
// 1. Print logs of level INFO or higher to stdout using tracing's fmt layer.
3030
// 2. Filter logs from OpenTelemetry's dependencies (like tonic, hyper,
3131
// reqwest etc. which are commonly used by the OTLP exporter) to only print
3232
// ERROR-level logs. This filtering helps reduce repetitive log messages
@@ -35,7 +35,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
3535
// https://github.com/open-telemetry/opentelemetry-rust/issues/761 is
3636
// resolved.
3737

38-
// Target name used by OpenTelemetry always start with "opentelemetry".
38+
// Target names used by all OpenTelemetry official crates always start with "opentelemetry".
3939
// Hence, one may use "add_directive("opentelemetry=off".parse().unwrap())"
4040
// to turn off all logs from OpenTelemetry.
4141

opentelemetry-sdk/src/logs/log_emitter.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use super::{BatchLogProcessor, LogProcessor, LogRecord, SimpleLogProcessor, TraceContext};
22
use crate::{export::logs::LogExporter, runtime::RuntimeChannel, Resource};
33
use crate::{logs::LogError, logs::LogResult};
4+
use opentelemetry::otel_info;
45
use opentelemetry::{otel_debug, trace::TraceContextExt, Context, InstrumentationScope};
56

67
#[cfg(feature = "spec_unstable_logs_enabled")]
@@ -154,10 +155,15 @@ impl LoggerProviderInner {
154155
impl Drop for LoggerProviderInner {
155156
fn drop(&mut self) {
156157
if !self.is_shutdown.load(Ordering::Relaxed) {
158+
otel_info!(
159+
name: "LoggerProvider.Drop",
160+
message = "Last reference of LoggerProvider dropped, initiating shutdown."
161+
);
157162
let _ = self.shutdown(); // errors are handled within shutdown
158163
} else {
159164
otel_debug!(
160-
name: "LoggerProvider.Drop.AlreadyShutdown"
165+
name: "LoggerProvider.Drop.AlreadyShutdown",
166+
message = "LoggerProvider was already shut down; drop will not attempt shutdown again."
161167
);
162168
}
163169
}

opentelemetry-sdk/src/metrics/meter_provider.rs

+29-10
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::{
99

1010
use opentelemetry::{
1111
metrics::{Meter, MeterProvider},
12-
otel_debug, otel_error, InstrumentationScope,
12+
otel_debug, otel_error, otel_info, InstrumentationScope,
1313
};
1414

1515
use crate::metrics::{MetricError, MetricResult};
@@ -109,6 +109,10 @@ impl SdkMeterProvider {
109109
/// There is no guaranteed that all telemetry be flushed or all resources have
110110
/// been released on error.
111111
pub fn shutdown(&self) -> MetricResult<()> {
112+
otel_info!(
113+
name: "MeterProvider.Shutdown",
114+
message = "User initiated shutdown of MeterProvider."
115+
);
112116
self.inner.shutdown()
113117
}
114118
}
@@ -139,15 +143,25 @@ impl Drop for SdkMeterProviderInner {
139143
// shutdown(), then we don't need to call shutdown again.
140144
if self.is_shutdown.load(Ordering::Relaxed) {
141145
otel_debug!(
142-
name: "MeterProvider.AlreadyShutdown",
143-
message = "Meter provider was already shut down; drop will not attempt shutdown again."
146+
name: "MeterProvider.Drop.AlreadyShutdown",
147+
message = "MeterProvider was already shut down; drop will not attempt shutdown again."
144148
);
145-
} else if let Err(err) = self.shutdown() {
146-
otel_error!(
147-
name: "MeterProvider.ShutdownFailed",
148-
message = "Shutdown attempt failed during drop of MeterProvider.",
149-
reason = format!("{}", err)
149+
} else {
150+
otel_info!(
151+
name: "MeterProvider.Drop",
152+
message = "Last reference of MeterProvider dropped, initiating shutdown."
150153
);
154+
if let Err(err) = self.shutdown() {
155+
otel_error!(
156+
name: "MeterProvider.Drop.ShutdownFailed",
157+
message = "Shutdown attempt failed during drop of MeterProvider.",
158+
reason = format!("{}", err)
159+
);
160+
} else {
161+
otel_info!(
162+
name: "MeterProvider.Drop.ShutdownCompleted",
163+
);
164+
}
151165
}
152166
}
153167
}
@@ -231,7 +245,7 @@ impl MeterProviderBuilder {
231245
/// Construct a new [MeterProvider] with this configuration.
232246
233247
pub fn build(self) -> SdkMeterProvider {
234-
SdkMeterProvider {
248+
let meter_provider = SdkMeterProvider {
235249
inner: Arc::new(SdkMeterProviderInner {
236250
pipes: Arc::new(Pipelines::new(
237251
self.resource.unwrap_or_default(),
@@ -241,7 +255,12 @@ impl MeterProviderBuilder {
241255
meters: Default::default(),
242256
is_shutdown: AtomicBool::new(false),
243257
}),
244-
}
258+
};
259+
260+
otel_info!(
261+
name: "MeterProvider.Built",
262+
);
263+
meter_provider
245264
}
246265
}
247266

opentelemetry-sdk/src/metrics/periodic_reader.rs

+8
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,18 @@ impl<RT: Runtime> PeriodicReaderWorker<RT> {
234234
async fn collect_and_export(&mut self) -> MetricResult<()> {
235235
self.reader.collect(&mut self.rm)?;
236236
if self.rm.scope_metrics.is_empty() {
237+
otel_debug!(
238+
name: "PeriodicReaderWorker.NoMetricsToExport",
239+
);
237240
// No metrics to export.
238241
return Ok(());
239242
}
240243

244+
otel_debug!(
245+
name: "PeriodicReaderWorker.InvokeExporter",
246+
message = "Calling exporter's export method with collected metrics.",
247+
count = self.rm.scope_metrics.len(),
248+
);
241249
let export = self.reader.exporter.export(&mut self.rm);
242250
let timeout = self.runtime.delay(self.timeout);
243251
pin_mut!(export);

0 commit comments

Comments
 (0)