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 0cc3dcdf31b..cadd5b47450 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 @@ default LogRecordBuilder setAttribute(String key, int value) { 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 6395768f36c..de25aabe4d4 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 @@ default ExtendedLogRecordBuilder setBody(Value body) { 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 @@ default ExtendedLogRecordBuilder setAllAttributes(ExtendedAttributes attributes) */ 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 4b38e6fab19..0b4e9eb98ed 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 @@ void buildAndEmit() { () -> 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 41abbe49ced..d095106aa51 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 334c7531506..b7524f3f9cb 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 cdc87b76ae5..b7af8bfe5a6 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 343d158cf8c..713fba7ded0 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.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 @@ static LogMarshaler create(LogRecordData logRecordData) { 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 331f7440a04..e8b533e170a 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.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 @@ public void writeTo(Serializer output, LogRecordData log, MarshalerContext conte 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 @@ public int getBinarySerializedSize(LogRecordData log, MarshalerContext context) 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 b38f4579e9d..9fabc98b9e8 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 @@ 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 495f826624d..14f1e9a3985 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 @@ static ExtendedSdkLogRecordData create( 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 ef3789d44dd..0cd5c78566e 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 @@ class ExtendedSdkReadWriteLogRecord extends SdkReadWriteLogRecord implements ExtendedReadWriteLogRecord { - @Nullable private final String eventName; private final Object lock = new Object(); @GuardedBy("lock") @@ -55,8 +54,8 @@ private ExtendedSdkReadWriteLogRecord( 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 8b69483d2a8..511f6cf641f 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 @@ default ReadWriteLogRecord setAllAttributes(Attributes attributes) { /** 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 038338d657b..1fa78926396 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 @@ public void emit() { 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 1927a0ec572..5fa5b156058 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 @@ static SdkLogRecordData create( @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 @@ static SdkLogRecordData create( 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 8b73a8eacb8..ee3bc5b385b 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 @@ protected SdkReadWriteLogRecord( 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 @@ protected SdkReadWriteLogRecord( this.severity = severity; this.severityText = severityText; this.body = body; + this.eventName = eventName; this.attributes = attributes; } @@ -70,7 +73,8 @@ static SdkReadWriteLogRecord create( 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 @@ static SdkReadWriteLogRecord create( severity, severityText, body, - attributes); + attributes, + eventName); } @Override @@ -122,7 +127,8 @@ public LogRecordData toLogRecordData() { severityText, body, getImmutableAttributes(), - attributes == null ? 0 : attributes.getTotalAddedValues()); + attributes == null ? 0 : attributes.getTotalAddedValues(), + eventName); } } @@ -168,6 +174,12 @@ public Attributes getAttributes() { 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 f21b175f52f..1fa37251037 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 @@ default Value getBodyValue() { * 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 9cfc40b4231..65710807321 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 @@ 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 @@ */ 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 7a444817d40..3dfca08f04b 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 @@ SdkReadWriteLogRecord buildLogRecord() { 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 c6f947bc062..7d067cef49f 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 @@ void emit_AllFields() { 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 @@ void emit_AllFields() { TraceFlags.getSampled(), TraceState.getDefault()); + builder.setEventName(eventName); builder.setBody(bodyStr); builder.setTimestamp(123, TimeUnit.SECONDS); builder.setTimestamp(timestamp); @@ -90,8 +92,7 @@ void emit_AllFields() { 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 63063731ac4..31e1e23551b 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 @@ void loggerBuilder_WithLogRecordProcessor() { 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 @@ void loggerBuilder_WithLogRecordProcessor() { 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 323e5b7813d..1a3daf3cbd6 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 LogRecordDataAssert hasInstrumentationScope( return this; } - // TODO (trask) once event name stabilizes, add hasEventName(String) + /** Asserts the log has the given epoch {@code eventName}. */ + public LogRecordDataAssert hasEventName(String eventName) { + isNotNull(); + if (!eventName.equals(actual.getEventName())) { + failWithActualExpectedAndMessage( + actual.getEventName(), + eventName, + "Expected log to have eventName <%s> 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 ec2e37294f4..82ef26f9eff 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 io.opentelemetry.sdk.logs.data.Body getBody() { @Nullable public abstract Value getBodyValue(); + @Override + @Nullable + public abstract String getEventName(); + TestLogRecordData() {} /** A {@code Builder} class for {@link TestLogRecordData}. */ @@ -173,5 +177,8 @@ public Builder setBody(io.opentelemetry.sdk.logs.data.Body body) { /** 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 10c69da9cdb..914927c28be 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 @@ * * @since 1.27.0 */ -// TODO (trask) delete this class once event name stabilizes @Immutable @AutoValue @AutoValue.CopyAnnotations @@ -67,6 +66,10 @@ public io.opentelemetry.sdk.logs.data.Body getBody() { @Nullable public abstract Value getBodyValue(); + @Override + @Nullable + public abstract String getEventName(); + TestExtendedLogRecordData() {} /** @@ -93,6 +96,7 @@ public TestExtendedLogRecordData build() { 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 165848c7f71..d15e3878cb4 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 @@ void passing() { 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 @@ void failure() { .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(