diff --git a/opentelemetry-otlp/src/exporter/tonic/logs.rs b/opentelemetry-otlp/src/exporter/tonic/logs.rs index 9f8b9d8a6d..b6e8eeb36c 100644 --- a/opentelemetry-otlp/src/exporter/tonic/logs.rs +++ b/opentelemetry-otlp/src/exporter/tonic/logs.rs @@ -63,7 +63,15 @@ impl LogExporter for TonicLogsClient { let (m, e, _) = inner .interceptor .call(Request::new(())) - .map_err(|e| OTelSdkError::InternalFailure(format!("error: {e:?}")))? + .map_err(|e| { + otel_debug!( + name: "TonicLogsClient.InterceptorFailed", + grpc_code = format!("{:?}", e.code()), + grpc_message = e.message(), + grpc_details = format!("{:?}", e.details()) + ); + OTelSdkError::InternalFailure("Logs export failed in interceptor".into()) + })? .into_parts(); (inner.client.clone(), m, e) } @@ -88,9 +96,13 @@ impl LogExporter for TonicLogsClient { Ok(()) } Err(e) => { - let error = format!("export error: {e:?}"); - otel_debug!(name: "TonicLogsClient.ExportFailed", error = &error); - Err(OTelSdkError::InternalFailure(error)) + otel_debug!( + name: "TonicLogsClient.ExportFailed", + grpc_code = format!("{:?}", e.code()), + grpc_message = e.message(), + grpc_details = format!("{:?}", e.details()) + ); + Err(OTelSdkError::InternalFailure("Logs export failed".into())) } } } diff --git a/opentelemetry-otlp/src/exporter/tonic/metrics.rs b/opentelemetry-otlp/src/exporter/tonic/metrics.rs index 13813c7305..9aab764a17 100644 --- a/opentelemetry-otlp/src/exporter/tonic/metrics.rs +++ b/opentelemetry-otlp/src/exporter/tonic/metrics.rs @@ -63,9 +63,15 @@ impl MetricsClient for TonicMetricsClient { .interceptor .call(Request::new(())) .map_err(|e| { - OTelSdkError::InternalFailure(format!( - "unexpected status while exporting {e:?}" - )) + otel_debug!( + name: "TonicMetricsClient.InterceptorFailed", + grpc_code = format!("{:?}", e.code()), + grpc_message = e.message(), + grpc_details = format!("{:?}", e.details()) + ); + OTelSdkError::InternalFailure( + "Metrics export failed in interceptor".into(), + ) })? .into_parts(); Ok((inner.client.clone(), m, e)) @@ -91,9 +97,15 @@ impl MetricsClient for TonicMetricsClient { Ok(()) } Err(e) => { - let error = format!("{e:?}"); - otel_debug!(name: "TonicMetricsClient.ExportFailed", error = &error); - Err(OTelSdkError::InternalFailure(error)) + otel_debug!( + name: "TonicMetricsClient.ExportFailed", + grpc_code = format!("{:?}", e.code()), + grpc_message = e.message(), + grpc_details = format!("{:?}", e.details()) + ); + Err(OTelSdkError::InternalFailure( + "Metrics export failed".into(), + )) } } } diff --git a/opentelemetry-otlp/src/exporter/tonic/trace.rs b/opentelemetry-otlp/src/exporter/tonic/trace.rs index 4378c37a04..98bb2d44e3 100644 --- a/opentelemetry-otlp/src/exporter/tonic/trace.rs +++ b/opentelemetry-otlp/src/exporter/tonic/trace.rs @@ -67,7 +67,15 @@ impl SpanExporter for TonicTracesClient { .lock() .await // tokio::sync::Mutex doesn't return a poisoned error, so we can safely use the interceptor here .call(Request::new(())) - .map_err(|e| OTelSdkError::InternalFailure(format!("error: {e:?}")))? + .map_err(|e| { + otel_debug!( + name: "TonicTracesClient.InterceptorFailed", + grpc_code = format!("{:?}", e.code()), + grpc_message = e.message(), + grpc_details = format!("{:?}", e.details()) + ); + OTelSdkError::InternalFailure("Traces export failed in interceptor".into()) + })? .into_parts(); (inner.client.clone(), m, e) } @@ -92,9 +100,13 @@ impl SpanExporter for TonicTracesClient { Ok(()) } Err(e) => { - let error = e.to_string(); - otel_debug!(name: "TonicTracesClient.ExportFailed", error = &error); - Err(OTelSdkError::InternalFailure(error)) + otel_debug!( + name: "TonicTracesClient.ExportFailed", + grpc_code = format!("{:?}", e.code()), + grpc_message = e.message(), + grpc_details = format!("{:?}", e.details()) + ); + Err(OTelSdkError::InternalFailure("Traces export failed".into())) } } }