From 9e1e9c6e9fb6c655e43f010b1a9c62b44c67114e Mon Sep 17 00:00:00 2001
From: jack-berg <34418638+jack-berg@users.noreply.github.com>
Date: Thu, 17 Apr 2025 12:30:43 -0500
Subject: [PATCH] Stabilize log record event name (#7277)
---
.../api/logs/LogRecordBuilder.java | 10 ++++++++++
.../logs/ExtendedLogRecordBuilder.java | 17 ++++++++--------
.../internal/AbstractDefaultLoggerTest.java | 3 +--
.../current_vs_latest/opentelemetry-api.txt | 4 +++-
.../opentelemetry-sdk-logs.txt | 9 ++++++++-
.../opentelemetry-sdk-testing.txt | 10 ++++++++++
.../internal/otlp/logs/LogMarshaler.java | 6 +-----
.../otlp/logs/LogStatelessMarshaler.java | 14 ++++---------
.../sdk/logs/ExtendedSdkLogRecordBuilder.java | 3 +--
.../sdk/logs/ExtendedSdkLogRecordData.java | 8 ++++++--
.../logs/ExtendedSdkReadWriteLogRecord.java | 5 ++---
.../sdk/logs/ReadWriteLogRecord.java | 6 +++++-
.../sdk/logs/SdkLogRecordBuilder.java | 10 +++++++++-
.../sdk/logs/SdkLogRecordData.java | 10 ++++++++--
.../sdk/logs/SdkReadWriteLogRecord.java | 20 +++++++++++++++----
.../sdk/logs/data/LogRecordData.java | 6 ++++++
.../data/internal/ExtendedLogRecordData.java | 4 ----
.../sdk/logs/ReadWriteLogRecordTest.java | 3 ++-
.../sdk/logs/SdkLogRecordBuilderTest.java | 5 +++--
.../sdk/logs/SdkLoggerProviderTest.java | 6 ++----
.../testing/assertj/LogRecordDataAssert.java | 14 ++++++++++++-
.../sdk/testing/logs/TestLogRecordData.java | 7 +++++++
.../internal/TestExtendedLogRecordData.java | 6 +++++-
.../testing/assertj/LogAssertionsTest.java | 4 ++--
24 files changed, 133 insertions(+), 57 deletions(-)
diff --git a/api/all/src/main/java/io/opentelemetry/api/logs/LogRecordBuilder.java b/api/all/src/main/java/io/opentelemetry/api/logs/LogRecordBuilder.java
index 0cc3dcdf31..cadd5b4745 100644
--- a/api/all/src/main/java/io/opentelemetry/api/logs/LogRecordBuilder.java
+++ b/api/all/src/main/java/io/opentelemetry/api/logs/LogRecordBuilder.java
@@ -198,6 +198,16 @@ public interface LogRecordBuilder {
return setAttribute(key, (long) value);
}
+ /**
+ * Sets the event name, which identifies the class / type of the Event.
+ *
+ *
This name should uniquely identify the event structure (both attributes and body). A log
+ * record with a non-empty event name is an Event.
+ */
+ default LogRecordBuilder setEventName(String eventName) {
+ return this;
+ }
+
/** Emit the log record. */
void emit();
}
diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedLogRecordBuilder.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedLogRecordBuilder.java
index 6395768f36..de25aabe4d 100644
--- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedLogRecordBuilder.java
+++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedLogRecordBuilder.java
@@ -61,6 +61,15 @@ public interface ExtendedLogRecordBuilder extends LogRecordBuilder {
return this;
}
+ /**
+ * Sets the event name, which identifies the class / type of the Event.
+ *
+ *
This name should uniquely identify the event structure (both attributes and body). A log
+ * record with a non-empty event name is an Event.
+ */
+ @Override
+ ExtendedLogRecordBuilder setEventName(String eventName);
+
/**
* {@inheritDoc}
*
@@ -124,14 +133,6 @@ public interface ExtendedLogRecordBuilder extends LogRecordBuilder {
*/
ExtendedLogRecordBuilder setAttribute(ExtendedAttributeKey key, T value);
- /**
- * Sets the event name, which identifies the class / type of the Event.
- *
- * This name should uniquely identify the event structure (both attributes and body). A log
- * record with a non-empty event name is an Event.
- */
- ExtendedLogRecordBuilder setEventName(String eventName);
-
/** Set standard {@code exception.*} attributes based on the {@code throwable}. */
ExtendedLogRecordBuilder setException(Throwable throwable);
}
diff --git a/api/testing-internal/src/main/java/io/opentelemetry/api/testing/internal/AbstractDefaultLoggerTest.java b/api/testing-internal/src/main/java/io/opentelemetry/api/testing/internal/AbstractDefaultLoggerTest.java
index 4b38e6fab1..0b4e9eb98e 100644
--- a/api/testing-internal/src/main/java/io/opentelemetry/api/testing/internal/AbstractDefaultLoggerTest.java
+++ b/api/testing-internal/src/main/java/io/opentelemetry/api/testing/internal/AbstractDefaultLoggerTest.java
@@ -51,8 +51,7 @@ public abstract class AbstractDefaultLoggerTest {
() ->
getLogger()
.logRecordBuilder()
- // TODO (trask) once event name stabilizes
- // .setEventName("event name")
+ .setEventName("event name")
.setTimestamp(100, TimeUnit.SECONDS)
.setTimestamp(Instant.now())
.setObservedTimestamp(100, TimeUnit.SECONDS)
diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt
index 41abbe49ce..d095106aa5 100644
--- a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt
+++ b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt
@@ -1,2 +1,4 @@
Comparing source compatibility of opentelemetry-api-1.50.0-SNAPSHOT.jar against opentelemetry-api-1.49.0.jar
-No changes.
\ No newline at end of file
+*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.logs.LogRecordBuilder (not serializable)
+ === CLASS FILE FORMAT VERSION: 52.0 <- 52.0
+ +++ NEW METHOD: PUBLIC(+) io.opentelemetry.api.logs.LogRecordBuilder setEventName(java.lang.String)
diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt
index 334c753150..b7524f3f9c 100644
--- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt
+++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt
@@ -1,2 +1,9 @@
Comparing source compatibility of opentelemetry-sdk-logs-1.50.0-SNAPSHOT.jar against opentelemetry-sdk-logs-1.49.0.jar
-No changes.
\ No newline at end of file
+*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.logs.data.LogRecordData (not serializable)
+ === CLASS FILE FORMAT VERSION: 52.0 <- 52.0
+ +++ NEW METHOD: PUBLIC(+) java.lang.String getEventName()
+ +++ NEW ANNOTATION: javax.annotation.Nullable
+*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.logs.ReadWriteLogRecord (not serializable)
+ === CLASS FILE FORMAT VERSION: 52.0 <- 52.0
+ +++ NEW METHOD: PUBLIC(+) java.lang.String getEventName()
+ +++ NEW ANNOTATION: javax.annotation.Nullable
diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt
index cdc87b76ae..b7af8bfe5a 100644
--- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt
+++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt
@@ -1,4 +1,14 @@
Comparing source compatibility of opentelemetry-sdk-testing-1.50.0-SNAPSHOT.jar against opentelemetry-sdk-testing-1.49.0.jar
+*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert (not serializable)
+ === CLASS FILE FORMAT VERSION: 52.0 <- 52.0
+ +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert hasEventName(java.lang.String)
+**** MODIFIED CLASS: PUBLIC ABSTRACT io.opentelemetry.sdk.testing.logs.TestLogRecordData (not serializable)
+ === CLASS FILE FORMAT VERSION: 52.0 <- 52.0
+ +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String getEventName()
+ +++ NEW ANNOTATION: javax.annotation.Nullable
+**** MODIFIED CLASS: PUBLIC ABSTRACT STATIC io.opentelemetry.sdk.testing.logs.TestLogRecordData$Builder (not serializable)
+ === CLASS FILE FORMAT VERSION: 52.0 <- 52.0
+ +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.logs.TestLogRecordData$Builder setEventName(java.lang.String)
+++ NEW CLASS: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData (not serializable)
+++ CLASS FILE FORMAT VERSION: 52.0 <- n.a.
+++ NEW SUPERCLASS: java.lang.Object
diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java
index 343d158cf8..713fba7ded 100644
--- a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java
+++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java
@@ -20,7 +20,6 @@ import io.opentelemetry.exporter.internal.otlp.KeyValueMarshaler;
import io.opentelemetry.proto.logs.v1.internal.LogRecord;
import io.opentelemetry.proto.logs.v1.internal.SeverityNumber;
import io.opentelemetry.sdk.logs.data.LogRecordData;
-import io.opentelemetry.sdk.logs.data.internal.ExtendedLogRecordData;
import java.io.IOException;
import javax.annotation.Nullable;
@@ -40,7 +39,6 @@ final class LogMarshaler extends MarshalerWithSize {
private static final String INVALID_TRACE_ID = TraceId.getInvalid();
private static final String INVALID_SPAN_ID = SpanId.getInvalid();
- private static final byte[] EMPTY_BYTES = new byte[0];
private final long timeUnixNano;
private final long observedTimeUnixNano;
@@ -82,9 +80,7 @@ final class LogMarshaler extends MarshalerWithSize {
spanContext.getTraceFlags(),
spanContext.getTraceId().equals(INVALID_TRACE_ID) ? null : spanContext.getTraceId(),
spanContext.getSpanId().equals(INVALID_SPAN_ID) ? null : spanContext.getSpanId(),
- logRecordData instanceof ExtendedLogRecordData
- ? MarshalerUtil.toBytes(((ExtendedLogRecordData) logRecordData).getEventName())
- : EMPTY_BYTES);
+ MarshalerUtil.toBytes(logRecordData.getEventName()));
}
private LogMarshaler(
diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogStatelessMarshaler.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogStatelessMarshaler.java
index 331f7440a0..e8b533e170 100644
--- a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogStatelessMarshaler.java
+++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogStatelessMarshaler.java
@@ -20,7 +20,6 @@ import io.opentelemetry.exporter.internal.otlp.AttributeKeyValueStatelessMarshal
import io.opentelemetry.exporter.internal.otlp.IncubatingUtil;
import io.opentelemetry.proto.logs.v1.internal.LogRecord;
import io.opentelemetry.sdk.logs.data.LogRecordData;
-import io.opentelemetry.sdk.logs.data.internal.ExtendedLogRecordData;
import java.io.IOException;
/** See {@link LogMarshaler}. */
@@ -79,10 +78,7 @@ final class LogStatelessMarshaler implements StatelessMarshaler {
if (!spanContext.getSpanId().equals(INVALID_SPAN_ID)) {
output.serializeSpanId(LogRecord.SPAN_ID, spanContext.getSpanId(), context);
}
- if (log instanceof ExtendedLogRecordData) {
- output.serializeStringWithContext(
- LogRecord.EVENT_NAME, ((ExtendedLogRecordData) log).getEventName(), context);
- }
+ output.serializeStringWithContext(LogRecord.EVENT_NAME, log.getEventName(), context);
}
@Override
@@ -130,11 +126,9 @@ final class LogStatelessMarshaler implements StatelessMarshaler {
size += MarshalerUtil.sizeSpanId(LogRecord.SPAN_ID, spanContext.getSpanId());
}
- if (log instanceof ExtendedLogRecordData) {
- size +=
- StatelessMarshalerUtil.sizeStringWithContext(
- LogRecord.EVENT_NAME, ((ExtendedLogRecordData) log).getEventName(), context);
- }
+ size +=
+ StatelessMarshalerUtil.sizeStringWithContext(
+ LogRecord.EVENT_NAME, log.getEventName(), context);
return size;
}
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordBuilder.java
index b38f4579e9..9fabc98b9e 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordBuilder.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordBuilder.java
@@ -23,7 +23,6 @@ import javax.annotation.Nullable;
final class ExtendedSdkLogRecordBuilder extends SdkLogRecordBuilder
implements ExtendedLogRecordBuilder {
- @Nullable private String eventName;
@Nullable private ExtendedAttributesMap extendedAttributes;
ExtendedSdkLogRecordBuilder(
@@ -33,7 +32,7 @@ final class ExtendedSdkLogRecordBuilder extends SdkLogRecordBuilder
@Override
public ExtendedSdkLogRecordBuilder setEventName(String eventName) {
- this.eventName = eventName;
+ super.setEventName(eventName);
return this;
}
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java
index 495f826624..14f1e9a398 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java
@@ -44,15 +44,19 @@ abstract class ExtendedSdkLogRecordData implements ExtendedLogRecordData {
severity,
severityText,
totalAttributeCount,
- eventName,
attributes,
- body);
+ body,
+ eventName);
}
@Override
@Nullable
public abstract Value> getBodyValue();
+ @Override
+ @Nullable
+ public abstract String getEventName();
+
@Override
@SuppressWarnings("deprecation") // Implementation of deprecated method
public io.opentelemetry.sdk.logs.data.Body getBody() {
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkReadWriteLogRecord.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkReadWriteLogRecord.java
index ef3789d44d..0cd5c78566 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkReadWriteLogRecord.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkReadWriteLogRecord.java
@@ -25,7 +25,6 @@ import javax.annotation.concurrent.ThreadSafe;
class ExtendedSdkReadWriteLogRecord extends SdkReadWriteLogRecord
implements ExtendedReadWriteLogRecord {
- @Nullable private final String eventName;
private final Object lock = new Object();
@GuardedBy("lock")
@@ -55,8 +54,8 @@ class ExtendedSdkReadWriteLogRecord extends SdkReadWriteLogRecord
severity,
severityText,
body,
- null);
- this.eventName = eventName;
+ null,
+ eventName);
this.extendedAttributes = extendedAttributes;
}
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ReadWriteLogRecord.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ReadWriteLogRecord.java
index 8b69483d2a..511f6cf641 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ReadWriteLogRecord.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ReadWriteLogRecord.java
@@ -52,7 +52,11 @@ public interface ReadWriteLogRecord {
/** Return an immutable {@link LogRecordData} instance representing this log record. */
LogRecordData toLogRecordData();
- // TODO (trask) once event name stabilizes, add getEventName()
+ /** Returns the log record event name, or {@code null} if none is set. */
+ @Nullable
+ default String getEventName() {
+ return null;
+ }
/**
* Returns the value of a given attribute if it exists. This is the equivalent of calling {@code
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java
index 038338d657..1fa7892639 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java
@@ -30,6 +30,7 @@ class SdkLogRecordBuilder implements LogRecordBuilder {
protected Severity severity = Severity.UNDEFINED_SEVERITY_NUMBER;
@Nullable protected String severityText;
@Nullable protected Value> body;
+ @Nullable protected String eventName;
@Nullable private AttributesMap attributes;
SdkLogRecordBuilder(
@@ -39,6 +40,12 @@ class SdkLogRecordBuilder implements LogRecordBuilder {
this.instrumentationScopeInfo = instrumentationScopeInfo;
}
+ @Override
+ public SdkLogRecordBuilder setEventName(String eventName) {
+ this.eventName = eventName;
+ return this;
+ }
+
@Override
public SdkLogRecordBuilder setTimestamp(long timestamp, TimeUnit unit) {
this.timestampEpochNanos = unit.toNanos(timestamp);
@@ -132,6 +139,7 @@ class SdkLogRecordBuilder implements LogRecordBuilder {
severity,
severityText,
body,
- attributes));
+ attributes,
+ eventName));
}
}
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java
index 1927a0ec57..5fa5b15605 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java
@@ -33,7 +33,8 @@ abstract class SdkLogRecordData implements LogRecordData {
@Nullable String severityText,
@Nullable Value> body,
Attributes attributes,
- int totalAttributeCount) {
+ int totalAttributeCount,
+ @Nullable String eventName) {
return new AutoValue_SdkLogRecordData(
resource,
instrumentationScopeInfo,
@@ -44,13 +45,18 @@ abstract class SdkLogRecordData implements LogRecordData {
severityText,
attributes,
totalAttributeCount,
- body);
+ body,
+ eventName);
}
@Override
@Nullable
public abstract Value> getBodyValue();
+ @Override
+ @Nullable
+ public abstract String getEventName();
+
@Override
@SuppressWarnings("deprecation") // Implementation of deprecated method
public io.opentelemetry.sdk.logs.data.Body getBody() {
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java
index 8b73a8eacb..ee3bc5b385 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java
@@ -30,6 +30,7 @@ class SdkReadWriteLogRecord implements ReadWriteLogRecord {
protected final Severity severity;
@Nullable protected final String severityText;
@Nullable protected final Value> body;
+ @Nullable protected String eventName;
private final Object lock = new Object();
@GuardedBy("lock")
@@ -46,7 +47,8 @@ class SdkReadWriteLogRecord implements ReadWriteLogRecord {
Severity severity,
@Nullable String severityText,
@Nullable Value> body,
- @Nullable AttributesMap attributes) {
+ @Nullable AttributesMap attributes,
+ @Nullable String eventName) {
this.logLimits = logLimits;
this.resource = resource;
this.instrumentationScopeInfo = instrumentationScopeInfo;
@@ -56,6 +58,7 @@ class SdkReadWriteLogRecord implements ReadWriteLogRecord {
this.severity = severity;
this.severityText = severityText;
this.body = body;
+ this.eventName = eventName;
this.attributes = attributes;
}
@@ -70,7 +73,8 @@ class SdkReadWriteLogRecord implements ReadWriteLogRecord {
Severity severity,
@Nullable String severityText,
@Nullable Value> body,
- @Nullable AttributesMap attributes) {
+ @Nullable AttributesMap attributes,
+ @Nullable String eventName) {
return new SdkReadWriteLogRecord(
logLimits,
resource,
@@ -81,7 +85,8 @@ class SdkReadWriteLogRecord implements ReadWriteLogRecord {
severity,
severityText,
body,
- attributes);
+ attributes,
+ eventName);
}
@Override
@@ -122,7 +127,8 @@ class SdkReadWriteLogRecord implements ReadWriteLogRecord {
severityText,
body,
getImmutableAttributes(),
- attributes == null ? 0 : attributes.getTotalAddedValues());
+ attributes == null ? 0 : attributes.getTotalAddedValues(),
+ eventName);
}
}
@@ -168,6 +174,12 @@ class SdkReadWriteLogRecord implements ReadWriteLogRecord {
return getImmutableAttributes();
}
+ @Override
+ @Nullable
+ public String getEventName() {
+ return eventName;
+ }
+
@Nullable
@Override
public T getAttribute(AttributeKey key) {
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordData.java
index f21b175f52..1fa3725103 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordData.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordData.java
@@ -82,4 +82,10 @@ public interface LogRecordData {
* LogLimits#getMaxNumberOfAttributes()}.
*/
int getTotalAttributeCount();
+
+ /** Returns the event name, or {@code null} if none is set. */
+ @Nullable
+ default String getEventName() {
+ return null;
+ }
}
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/internal/ExtendedLogRecordData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/internal/ExtendedLogRecordData.java
index 9cfc40b423..6571080732 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/internal/ExtendedLogRecordData.java
+++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/internal/ExtendedLogRecordData.java
@@ -8,7 +8,6 @@ package io.opentelemetry.sdk.logs.data.internal;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.common.ExtendedAttributes;
import io.opentelemetry.sdk.logs.data.LogRecordData;
-import javax.annotation.Nullable;
/**
* This class is internal and experimental. Its APIs are unstable and can change at any time. Its
@@ -17,9 +16,6 @@ import javax.annotation.Nullable;
*/
public interface ExtendedLogRecordData extends LogRecordData {
- @Nullable
- String getEventName();
-
/** Returns the attributes for this log, or {@link ExtendedAttributes#empty()} if unset. */
ExtendedAttributes getExtendedAttributes();
diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/ReadWriteLogRecordTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/ReadWriteLogRecordTest.java
index 7a444817d4..3dfca08f04 100644
--- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/ReadWriteLogRecordTest.java
+++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/ReadWriteLogRecordTest.java
@@ -68,6 +68,7 @@ class ReadWriteLogRecordTest {
Severity.DEBUG,
"buggin",
body,
- initialAttributes);
+ initialAttributes,
+ "my.event.name");
}
}
diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java
index c6f947bc06..7d067cef49 100644
--- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java
+++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java
@@ -65,6 +65,7 @@ class SdkLogRecordBuilderTest {
Instant timestamp = Instant.now();
Instant observedTimestamp = Instant.now().plusNanos(100);
+ String eventName = "my.event.name";
String bodyStr = "body";
String sevText = "sevText";
Severity severity = Severity.DEBUG3;
@@ -75,6 +76,7 @@ class SdkLogRecordBuilderTest {
TraceFlags.getSampled(),
TraceState.getDefault());
+ builder.setEventName(eventName);
builder.setBody(bodyStr);
builder.setTimestamp(123, TimeUnit.SECONDS);
builder.setTimestamp(timestamp);
@@ -90,8 +92,7 @@ class SdkLogRecordBuilderTest {
assertThat(emittedLog.get().toLogRecordData())
.hasResource(RESOURCE)
.hasInstrumentationScope(SCOPE_INFO)
- // TODO (trask) once event name stabilizes
- // .hasEventName(eventName)
+ .hasEventName(eventName)
.hasBody(bodyStr)
.hasTimestamp(TimeUnit.SECONDS.toNanos(timestamp.getEpochSecond()) + timestamp.getNano())
.hasObservedTimestamp(
diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java
index 63063731ac..31e1e23551 100644
--- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java
+++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java
@@ -246,8 +246,7 @@ class SdkLoggerProviderTest {
sdkLoggerProvider
.get("test")
.logRecordBuilder()
- // TODO (trask) once event name stabilizes
- // .setEventName("event name")
+ .setEventName("my.event.name")
.setTimestamp(100, TimeUnit.NANOSECONDS)
.setContext(Span.wrap(spanContext).storeInContext(Context.root()))
.setSeverity(Severity.DEBUG)
@@ -260,8 +259,7 @@ class SdkLoggerProviderTest {
assertThat(logRecordData.get())
.hasResource(resource)
.hasInstrumentationScope(InstrumentationScopeInfo.create("test"))
- // TODO (trask) once event name stabilizes
- // .hasEventName("event name")
+ .hasEventName("my.event.name")
.hasTimestamp(100)
.hasSpanContext(spanContext)
.hasSeverity(Severity.DEBUG)
diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogRecordDataAssert.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogRecordDataAssert.java
index 323e5b7813..1a3daf3cbd 100644
--- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogRecordDataAssert.java
+++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogRecordDataAssert.java
@@ -84,7 +84,19 @@ public final class LogRecordDataAssert extends AbstractAssert but was <%s>",
+ eventName,
+ actual.getEventName());
+ }
+ return this;
+ }
/** Asserts the log has the given epoch {@code timestamp}. */
public LogRecordDataAssert hasTimestamp(long timestampEpochNanos) {
diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java
index ec2e37294f..82ef26f9ef 100644
--- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java
+++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java
@@ -60,6 +60,10 @@ public abstract class TestLogRecordData implements LogRecordData {
@Nullable
public abstract Value> getBodyValue();
+ @Override
+ @Nullable
+ public abstract String getEventName();
+
TestLogRecordData() {}
/** A {@code Builder} class for {@link TestLogRecordData}. */
@@ -173,5 +177,8 @@ public abstract class TestLogRecordData implements LogRecordData {
/** Set the total attribute count. */
public abstract Builder setTotalAttributeCount(int totalAttributeCount);
+
+ /** Set the event name. */
+ public abstract Builder setEventName(String eventName);
}
}
diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java
index 10c69da9cd..914927c28b 100644
--- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java
+++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java
@@ -29,7 +29,6 @@ import javax.annotation.concurrent.Immutable;
*
* @since 1.27.0
*/
-// TODO (trask) delete this class once event name stabilizes
@Immutable
@AutoValue
@AutoValue.CopyAnnotations
@@ -67,6 +66,10 @@ public abstract class TestExtendedLogRecordData implements ExtendedLogRecordData
@Nullable
public abstract Value> getBodyValue();
+ @Override
+ @Nullable
+ public abstract String getEventName();
+
TestExtendedLogRecordData() {}
/**
@@ -93,6 +96,7 @@ public abstract class TestExtendedLogRecordData implements ExtendedLogRecordData
public abstract Builder setInstrumentationScopeInfo(
InstrumentationScopeInfo instrumentationScopeInfo);
+ /** Sets the event name. */
public abstract Builder setEventName(String eventName);
/**
diff --git a/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java b/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java
index 165848c7f7..d15e3878cb 100644
--- a/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java
+++ b/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java
@@ -107,8 +107,7 @@ public class LogAssertionsTest {
satisfies(DOG, val -> val.startsWith("bar")),
satisfies(AttributeKey.booleanKey("dog is cute"), val -> val.isTrue())))
.hasInstrumentationScope(INSTRUMENTATION_SCOPE_INFO)
- // TODO (trask) once event name stabilizes
- // .hasEventName("event name")
+ .hasEventName("event name")
.hasTimestamp(100)
.hasObservedTimestamp(200)
.hasSpanContext(
@@ -207,6 +206,7 @@ public class LogAssertionsTest {
.isInstanceOf(AssertionError.class);
assertThatThrownBy(
() -> assertThat(LOG_DATA).hasInstrumentationScope(InstrumentationScopeInfo.empty()));
+ assertThatThrownBy(() -> assertThat(LOG_DATA).hasEventName("foo"));
assertThatThrownBy(() -> assertThat(LOG_DATA).hasTimestamp(200));
assertThatThrownBy(() -> assertThat(LOG_DATA).hasObservedTimestamp(100));
assertThatThrownBy(