Skip to content

Commit fb22190

Browse files
committed
Add setEventName to ExtendedLogRecordBuilder
1 parent d56bdf5 commit fb22190

File tree

25 files changed

+325
-21
lines changed

25 files changed

+325
-21
lines changed

api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedDefaultLogger.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
class ExtendedDefaultLogger implements ExtendedLogger {
1818

1919
private static final Logger INSTANCE = new ExtendedDefaultLogger();
20-
private static final LogRecordBuilder NOOP_LOG_RECORD_BUILDER = new NoopLogRecordBuilder();
20+
private static final ExtendedLogRecordBuilder NOOP_LOG_RECORD_BUILDER =
21+
new NoopExtendedLogRecordBuilder();
2122

2223
private ExtendedDefaultLogger() {}
2324

@@ -26,13 +27,18 @@ static Logger getNoop() {
2627
}
2728

2829
@Override
29-
public LogRecordBuilder logRecordBuilder() {
30+
public ExtendedLogRecordBuilder logRecordBuilder() {
3031
return NOOP_LOG_RECORD_BUILDER;
3132
}
3233

33-
private static final class NoopLogRecordBuilder implements ExtendedLogRecordBuilder {
34+
private static final class NoopExtendedLogRecordBuilder implements ExtendedLogRecordBuilder {
3435

35-
private NoopLogRecordBuilder() {}
36+
private NoopExtendedLogRecordBuilder() {}
37+
38+
@Override
39+
public ExtendedLogRecordBuilder setEventName(String eventName) {
40+
return this;
41+
}
3642

3743
@Override
3844
public LogRecordBuilder setTimestamp(long timestamp, TimeUnit unit) {

api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedLogRecordBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
/** Extended {@link LogRecordBuilder} with experimental APIs. */
1111
public interface ExtendedLogRecordBuilder extends LogRecordBuilder {
1212

13-
// Nothing at the moment, but experimental methods may be added in the future.
13+
// keep this class even if it is empty, since experimental methods may be added in the future.
1414

15+
ExtendedLogRecordBuilder setEventName(String eventName);
1516
}

api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedLogger.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,7 @@ public interface ExtendedLogger extends Logger {
2020
default boolean isEnabled() {
2121
return true;
2222
}
23+
24+
@Override
25+
ExtendedLogRecordBuilder logRecordBuilder();
2326
}

api/testing-internal/src/main/java/io/opentelemetry/api/testing/internal/AbstractDefaultLoggerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ void buildAndEmit() {
5151
() ->
5252
getLogger()
5353
.logRecordBuilder()
54+
// TODO (trask) once event name stabilizes
55+
// .setEventName("event name")
5456
.setTimestamp(100, TimeUnit.SECONDS)
5557
.setTimestamp(Instant.now())
5658
.setObservedTimestamp(100, TimeUnit.SECONDS)

exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/TestDataExporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
2929
import io.opentelemetry.sdk.resources.Resource;
3030
import io.opentelemetry.sdk.testing.logs.TestLogRecordData;
31+
import io.opentelemetry.sdk.testing.logs.internal.TestExtendedLogRecordData;
3132
import io.opentelemetry.sdk.testing.trace.TestSpanData;
3233
import io.opentelemetry.sdk.trace.data.EventData;
3334
import io.opentelemetry.sdk.trace.data.SpanData;
@@ -47,13 +48,14 @@ abstract class TestDataExporter<T> {
4748
Resource.create(Attributes.builder().put("key", "value").build());
4849

4950
private static final LogRecordData LOG1 =
50-
TestLogRecordData.builder()
51+
TestExtendedLogRecordData.builder()
5152
.setResource(RESOURCE)
5253
.setInstrumentationScopeInfo(
5354
InstrumentationScopeInfo.builder("instrumentation")
5455
.setVersion("1")
5556
.setAttributes(Attributes.builder().put("key", "value").build())
5657
.build())
58+
.setEventName("event name")
5759
.setBody("body1")
5860
.setSeverity(Severity.INFO)
5961
.setSeverityText("INFO")

exporters/logging-otlp/src/test/resources/expected-logs-wrapper.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
},
2828
"logRecords": [
2929
{
30+
"eventName": "event name",
3031
"timeUnixNano": "100",
3132
"observedTimeUnixNano": "200",
3233
"severityNumber": 9,

exporters/logging-otlp/src/test/resources/expected-logs.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
},
2626
"logRecords": [
2727
{
28+
"eventName": "event name",
2829
"timeUnixNano": "100",
2930
"observedTimeUnixNano": "200",
3031
"severityNumber": 9,

exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.opentelemetry.proto.logs.v1.internal.LogRecord;
2020
import io.opentelemetry.proto.logs.v1.internal.SeverityNumber;
2121
import io.opentelemetry.sdk.logs.data.LogRecordData;
22+
import io.opentelemetry.sdk.logs.data.internal.ExtendedLogRecordData;
2223
import java.io.IOException;
2324
import javax.annotation.Nullable;
2425

@@ -36,6 +37,7 @@ final class LogMarshaler extends MarshalerWithSize {
3637
private final TraceFlags traceFlags;
3738
@Nullable private final String traceId;
3839
@Nullable private final String spanId;
40+
private final byte[] eventName;
3941

4042
static LogMarshaler create(LogRecordData logRecordData) {
4143
KeyValueMarshaler[] attributeMarshalers =
@@ -57,7 +59,8 @@ static LogMarshaler create(LogRecordData logRecordData) {
5759
logRecordData.getTotalAttributeCount() - logRecordData.getAttributes().size(),
5860
spanContext.getTraceFlags(),
5961
spanContext.getTraceId().equals(INVALID_TRACE_ID) ? null : spanContext.getTraceId(),
60-
spanContext.getSpanId().equals(INVALID_SPAN_ID) ? null : spanContext.getSpanId());
62+
spanContext.getSpanId().equals(INVALID_SPAN_ID) ? null : spanContext.getSpanId(),
63+
MarshalerUtil.toBytes(((ExtendedLogRecordData) logRecordData).getEventName()));
6164
}
6265

6366
private LogMarshaler(
@@ -70,7 +73,8 @@ private LogMarshaler(
7073
int droppedAttributesCount,
7174
TraceFlags traceFlags,
7275
@Nullable String traceId,
73-
@Nullable String spanId) {
76+
@Nullable String spanId,
77+
byte[] eventName) {
7478
super(
7579
calculateSize(
7680
timeUnixNano,
@@ -82,7 +86,8 @@ private LogMarshaler(
8286
droppedAttributesCount,
8387
traceFlags,
8488
traceId,
85-
spanId));
89+
spanId,
90+
eventName));
8691
this.timeUnixNano = timeUnixNano;
8792
this.observedTimeUnixNano = observedTimeUnixNano;
8893
this.traceId = traceId;
@@ -93,6 +98,7 @@ private LogMarshaler(
9398
this.anyValueMarshaler = anyValueMarshaler;
9499
this.attributeMarshalers = attributeMarshalers;
95100
this.droppedAttributesCount = droppedAttributesCount;
101+
this.eventName = eventName;
96102
}
97103

98104
@Override
@@ -115,6 +121,8 @@ protected void writeTo(Serializer output) throws IOException {
115121
output.serializeByteAsFixed32(LogRecord.FLAGS, traceFlags.asByte());
116122
output.serializeTraceId(LogRecord.TRACE_ID, traceId);
117123
output.serializeSpanId(LogRecord.SPAN_ID, spanId);
124+
125+
output.serializeString(LogRecord.EVENT_NAME, eventName);
118126
}
119127

120128
private static int calculateSize(
@@ -127,7 +135,8 @@ private static int calculateSize(
127135
int droppedAttributesCount,
128136
TraceFlags traceFlags,
129137
@Nullable String traceId,
130-
@Nullable String spanId) {
138+
@Nullable String spanId,
139+
byte[] eventName) {
131140
int size = 0;
132141
size += MarshalerUtil.sizeFixed64(LogRecord.TIME_UNIX_NANO, timeUnixNano);
133142

@@ -147,6 +156,8 @@ private static int calculateSize(
147156
size += MarshalerUtil.sizeByteAsFixed32(LogRecord.FLAGS, traceFlags.asByte());
148157
size += MarshalerUtil.sizeTraceId(LogRecord.TRACE_ID, traceId);
149158
size += MarshalerUtil.sizeSpanId(LogRecord.SPAN_ID, spanId);
159+
160+
size += MarshalerUtil.sizeBytes(LogRecord.EVENT_NAME, eventName);
150161
return size;
151162
}
152163

exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogStatelessMarshaler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.opentelemetry.exporter.internal.otlp.AttributeKeyValueStatelessMarshaler;
2020
import io.opentelemetry.proto.logs.v1.internal.LogRecord;
2121
import io.opentelemetry.sdk.logs.data.LogRecordData;
22+
import io.opentelemetry.sdk.logs.data.internal.ExtendedLogRecordData;
2223
import java.io.IOException;
2324

2425
/** See {@link LogMarshaler}. */
@@ -55,6 +56,8 @@ public void writeTo(Serializer output, LogRecordData log, MarshalerContext conte
5556
if (!spanContext.getSpanId().equals(INVALID_SPAN_ID)) {
5657
output.serializeSpanId(LogRecord.SPAN_ID, spanContext.getSpanId(), context);
5758
}
59+
output.serializeStringWithContext(
60+
LogRecord.EVENT_NAME, ((ExtendedLogRecordData) log).getEventName(), context);
5861
}
5962

6063
@Override
@@ -93,6 +96,10 @@ public int getBinarySerializedSize(LogRecordData log, MarshalerContext context)
9396
size += MarshalerUtil.sizeSpanId(LogRecord.SPAN_ID, spanContext.getSpanId());
9497
}
9598

99+
size +=
100+
StatelessMarshalerUtil.sizeStringWithContext(
101+
LogRecord.EVENT_NAME, ((ExtendedLogRecordData) log).getEventName(), context);
102+
96103
return size;
97104
}
98105
}

exporters/otlp/common/src/test/java/io/opentelemetry/exporter/internal/otlp/logs/LogsRequestMarshalerTest.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
3434
import io.opentelemetry.sdk.logs.data.LogRecordData;
3535
import io.opentelemetry.sdk.resources.Resource;
36-
import io.opentelemetry.sdk.testing.logs.TestLogRecordData;
36+
import io.opentelemetry.sdk.testing.logs.internal.TestExtendedLogRecordData;
3737
import java.io.ByteArrayOutputStream;
3838
import java.io.IOException;
3939
import java.io.UncheckedIOException;
@@ -52,14 +52,15 @@ class LogsRequestMarshalerTest {
5252
private static final String TRACE_ID = TraceId.fromBytes(TRACE_ID_BYTES);
5353
private static final byte[] SPAN_ID_BYTES = new byte[] {0, 0, 0, 0, 4, 3, 2, 1};
5454
private static final String SPAN_ID = SpanId.fromBytes(SPAN_ID_BYTES);
55+
private static final String EVENT_NAME = "hello";
5556
private static final String BODY = "Hello world from this log...";
5657

5758
@Test
5859
void toProtoResourceLogs() {
5960
ResourceLogsMarshaler[] resourceLogsMarshalers =
6061
ResourceLogsMarshaler.create(
6162
Collections.singleton(
62-
TestLogRecordData.builder()
63+
TestExtendedLogRecordData.builder()
6364
.setResource(
6465
Resource.builder().put("one", 1).setSchemaUrl("http://url").build())
6566
.setInstrumentationScopeInfo(
@@ -68,6 +69,7 @@ void toProtoResourceLogs() {
6869
.setSchemaUrl("http://url")
6970
.setAttributes(Attributes.builder().put("key", "value").build())
7071
.build())
72+
.setEventName(EVENT_NAME)
7173
.setBody(BODY)
7274
.setSeverity(Severity.INFO)
7375
.setSeverityText("INFO")
@@ -108,11 +110,12 @@ void toProtoLogRecord(MarshalerSource marshalerSource) {
108110
parse(
109111
LogRecord.getDefaultInstance(),
110112
marshalerSource.create(
111-
TestLogRecordData.builder()
113+
TestExtendedLogRecordData.builder()
112114
.setResource(
113115
Resource.create(Attributes.builder().put("testKey", "testValue").build()))
114116
.setInstrumentationScopeInfo(
115117
InstrumentationScopeInfo.builder("instrumentation").setVersion("1").build())
118+
.setEventName(EVENT_NAME)
116119
.setBody(BODY)
117120
.setSeverity(Severity.INFO)
118121
.setSeverityText("INFO")
@@ -128,6 +131,7 @@ void toProtoLogRecord(MarshalerSource marshalerSource) {
128131
assertThat(logRecord.getTraceId().toByteArray()).isEqualTo(TRACE_ID_BYTES);
129132
assertThat(logRecord.getSpanId().toByteArray()).isEqualTo(SPAN_ID_BYTES);
130133
assertThat(logRecord.getSeverityText()).isEqualTo("INFO");
134+
assertThat(logRecord.getEventName()).isEqualTo(EVENT_NAME);
131135
assertThat(logRecord.getBody()).isEqualTo(AnyValue.newBuilder().setStringValue(BODY).build());
132136
assertThat(logRecord.getAttributesList())
133137
.containsExactly(
@@ -147,7 +151,7 @@ void toProtoLogRecord_MinimalFields(MarshalerSource marshalerSource) {
147151
parse(
148152
LogRecord.getDefaultInstance(),
149153
marshalerSource.create(
150-
TestLogRecordData.builder()
154+
TestExtendedLogRecordData.builder()
151155
.setResource(
152156
Resource.create(Attributes.builder().put("testKey", "testValue").build()))
153157
.setInstrumentationScopeInfo(

exporters/otlp/common/src/test/java/io/opentelemetry/exporter/internal/otlp/logs/LowAllocationLogRequestMarshalerTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
1717
import io.opentelemetry.sdk.logs.data.LogRecordData;
1818
import io.opentelemetry.sdk.resources.Resource;
19-
import io.opentelemetry.sdk.testing.logs.TestLogRecordData;
19+
import io.opentelemetry.sdk.testing.logs.internal.TestExtendedLogRecordData;
2020
import java.io.ByteArrayOutputStream;
2121
import java.nio.charset.StandardCharsets;
2222
import java.util.ArrayList;
@@ -39,6 +39,7 @@ class LowAllocationLogRequestMarshalerTest {
3939
AttributeKey.doubleArrayKey("key_double_array");
4040
private static final AttributeKey<List<Boolean>> KEY_BOOLEAN_ARRAY =
4141
AttributeKey.booleanArrayKey("key_boolean_array");
42+
private static final String EVENT_NAME = "hello";
4243
private static final String BODY = "Hello world from this log...";
4344

4445
private static final Resource RESOURCE =
@@ -72,9 +73,10 @@ private static List<LogRecordData> createLogRecordDataList() {
7273
}
7374

7475
private static LogRecordData createLogRecordData() {
75-
return TestLogRecordData.builder()
76+
return TestExtendedLogRecordData.builder()
7677
.setResource(RESOURCE)
7778
.setInstrumentationScopeInfo(INSTRUMENTATION_SCOPE_INFO)
79+
.setEventName(EVENT_NAME)
7880
.setBody(BODY)
7981
.setSeverity(Severity.INFO)
8082
.setSeverityText("INFO")

integration-tests/otlp/src/main/java/io/opentelemetry/integrationtest/OtlpExporterIntegrationTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,8 +648,9 @@ private static void testLogRecordExporter(LogRecordExporter logRecordExporter) {
648648
TraceFlags.getDefault(),
649649
TraceState.getDefault());
650650

651-
try (Scope unused = Span.wrap(spanContext).makeCurrent()) {
651+
try (Scope ignored = Span.wrap(spanContext).makeCurrent()) {
652652
((ExtendedLogRecordBuilder) logger.logRecordBuilder())
653+
.setEventName("event name")
653654
.setBody(
654655
of(
655656
KeyValue.of("str_key", of("value")),
@@ -699,6 +700,7 @@ private static void testLogRecordExporter(LogRecordExporter logRecordExporter) {
699700

700701
// LogRecord via Logger.logRecordBuilder()...emit()
701702
io.opentelemetry.proto.logs.v1.LogRecord protoLog1 = ilLogs.getLogRecords(0);
703+
assertThat(protoLog1.getEventName()).isEqualTo("event name");
702704
assertThat(protoLog1.getBody())
703705
.isEqualTo(
704706
AnyValue.newBuilder()

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordBuilder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ final class ExtendedSdkLogRecordBuilder extends SdkLogRecordBuilder
2323
super(loggerSharedState, instrumentationScopeInfo);
2424
}
2525

26+
@Override
27+
public ExtendedSdkLogRecordBuilder setEventName(String eventName) {
28+
super.setEventName(eventName);
29+
return this;
30+
}
31+
2632
@Override
2733
public ExtendedSdkLogRecordBuilder setTimestamp(long timestamp, TimeUnit unit) {
2834
super.setTimestamp(timestamp, unit);

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogger.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.sdk.logs;
77

8+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
89
import io.opentelemetry.api.incubator.logs.ExtendedLogger;
910
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
1011
import io.opentelemetry.sdk.logs.internal.LoggerConfig;
@@ -26,4 +27,9 @@ final class ExtendedSdkLogger extends SdkLogger implements ExtendedLogger {
2627
public boolean isEnabled() {
2728
return loggerEnabled;
2829
}
30+
31+
@Override
32+
public ExtendedLogRecordBuilder logRecordBuilder() {
33+
return (ExtendedLogRecordBuilder) super.logRecordBuilder();
34+
}
2935
}

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ReadWriteLogRecord.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ default ReadWriteLogRecord setAllAttributes(Attributes attributes) {
5252
/** Return an immutable {@link LogRecordData} instance representing this log record. */
5353
LogRecordData toLogRecordData();
5454

55+
// TODO (trask) once event name stabilizes, add getEventName()
56+
5557
/**
5658
* Returns the value of a given attribute if it exists. This is the equivalent of calling {@code
5759
* getAttributes().get(key)}.

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class SdkLogRecordBuilder implements LogRecordBuilder {
2424
private final LogLimits logLimits;
2525

2626
private final InstrumentationScopeInfo instrumentationScopeInfo;
27+
@Nullable private String eventName;
2728
private long timestampEpochNanos;
2829
private long observedTimestampEpochNanos;
2930
@Nullable private Context context;
@@ -39,6 +40,12 @@ class SdkLogRecordBuilder implements LogRecordBuilder {
3940
this.instrumentationScopeInfo = instrumentationScopeInfo;
4041
}
4142

43+
// accessible via ExtendedSdkLogRecordBuilder
44+
SdkLogRecordBuilder setEventName(String eventName) {
45+
this.eventName = eventName;
46+
return this;
47+
}
48+
4249
@Override
4350
public SdkLogRecordBuilder setTimestamp(long timestamp, TimeUnit unit) {
4451
this.timestampEpochNanos = unit.toNanos(timestamp);
@@ -126,6 +133,7 @@ public void emit() {
126133
loggerSharedState.getLogLimits(),
127134
loggerSharedState.getResource(),
128135
instrumentationScopeInfo,
136+
eventName,
129137
timestampEpochNanos,
130138
observedTimestampEpochNanos,
131139
Span.fromContext(context).getSpanContext(),

0 commit comments

Comments
 (0)