diff --git a/opentelemetry-api/src/logs/record.rs b/opentelemetry-api/src/logs/record.rs index c98b3a7581..a65310be39 100644 --- a/opentelemetry-api/src/logs/record.rs +++ b/opentelemetry-api/src/logs/record.rs @@ -4,7 +4,7 @@ use crate::{ }; use std::{borrow::Cow, time::SystemTime}; -#[derive(Debug, Clone, Default)] +#[derive(Debug, Clone)] #[non_exhaustive] /// LogRecord represents all data carried by a log record, and /// is provided to `LogExporter`s as input. @@ -13,7 +13,7 @@ pub struct LogRecord { pub timestamp: Option, /// Timestamp for when the record was observed by OpenTelemetry - pub observed_timestamp: Option, + pub observed_timestamp: SystemTime, /// Trace context for logs associated with spans pub trace_context: Option, @@ -30,6 +30,20 @@ pub struct LogRecord { pub attributes: Option>, } +impl Default for LogRecord { + fn default() -> Self { + LogRecord { + timestamp: None, + observed_timestamp: SystemTime::now(), + trace_context: None, + severity_text: None, + severity_number: None, + body: None, + attributes: None, + } + } +} + impl LogRecord { /// Create a [`LogRecordBuilder`] to create a new Log Record pub fn builder() -> LogRecordBuilder { @@ -261,7 +275,7 @@ impl LogRecordBuilder { pub fn with_observed_timestamp(self, timestamp: SystemTime) -> Self { Self { record: LogRecord { - observed_timestamp: Some(timestamp), + observed_timestamp: timestamp, ..self.record }, } diff --git a/opentelemetry-proto/src/transform/logs.rs b/opentelemetry-proto/src/transform/logs.rs index 59d984bec5..9a3ff38108 100644 --- a/opentelemetry-proto/src/transform/logs.rs +++ b/opentelemetry-proto/src/transform/logs.rs @@ -87,10 +87,7 @@ pub mod tonic { LogRecord { time_unix_nano: log_record.timestamp.map(to_nanos).unwrap_or_default(), - observed_time_unix_nano: log_record - .observed_timestamp - .map(to_nanos) - .unwrap_or_default(), + observed_time_unix_nano: to_nanos(log_record.observed_timestamp), severity_number: severity_number.into(), severity_text: log_record.severity_text.map(Into::into).unwrap_or_default(), body: log_record.body.map(Into::into), diff --git a/opentelemetry-stdout/src/logs/transform.rs b/opentelemetry-stdout/src/logs/transform.rs index ba0a0ceb78..9f4bf7bb21 100644 --- a/opentelemetry-stdout/src/logs/transform.rs +++ b/opentelemetry-stdout/src/logs/transform.rs @@ -74,11 +74,8 @@ struct LogRecord { serialize_with = "opt_as_unix_nano" )] time_unix_nano: Option, - #[serde( - skip_serializing_if = "Option::is_none", - serialize_with = "opt_as_unix_nano" - )] - observed_time_unix_nano: Option, + #[serde(serialize_with = "as_unix_nano")] + observed_time_unix_nano: SystemTime, severity_number: u32, #[serde(skip_serializing_if = "Option::is_none")] severity_text: Option>, diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index 8e5a098deb..2b93218bcf 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -194,14 +194,10 @@ impl UserEventsExporter { eb.add_value("__csver__", 0x0401u16, FieldFormat::HexInt, 0); // populate CS PartA - let event_time: SystemTime; - if log_data.record.timestamp.is_some() { - event_time = log_data.record.timestamp.unwrap(); - } else if log_data.record.observed_timestamp.is_some() { - event_time = log_data.record.observed_timestamp.unwrap(); - } else { - event_time = SystemTime::now(); - } + let event_time: SystemTime = log_data + .record + .timestamp + .unwrap_or(log_data.record.observed_timestamp); cs_a_count += 1; // for event_time eb.add_struct("PartA", cs_a_count, 0); {