diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java index 327a9adaa3b..16dfaf1ba98 100644 --- a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java +++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java @@ -15,6 +15,7 @@ import io.opentelemetry.proto.logs.v1.internal.SeverityNumber; import io.opentelemetry.sdk.logs.data.Severity; import java.io.IOException; +import javax.annotation.Nullable; final class LogMarshaler extends MarshalerWithSize { private final long timeUnixNano; @@ -25,8 +26,8 @@ final class LogMarshaler extends MarshalerWithSize { private final KeyValueMarshaler[] attributeMarshalers; private final int droppedAttributesCount; private final int flags; - private final String traceId; - private final String spanId; + @Nullable private final String traceId; + @Nullable private final String spanId; static LogMarshaler create(io.opentelemetry.sdk.logs.data.LogData logData) { KeyValueMarshaler[] attributeMarshalers = @@ -59,8 +60,8 @@ private LogMarshaler( KeyValueMarshaler[] attributeMarshalers, int droppedAttributesCount, int flags, - String traceId, - String spanId) { + @Nullable String traceId, + @Nullable String spanId) { super( calculateSize( timeUnixNano, @@ -114,8 +115,8 @@ private static int calculateSize( KeyValueMarshaler[] attributeMarshalers, int droppedAttributesCount, int flags, - String traceId, - String spanId) { + @Nullable String traceId, + @Nullable String spanId) { int size = 0; size += MarshalerUtil.sizeFixed64(LogRecord.TIME_UNIX_NANO, timeUnixNano); diff --git a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java index f72611e117f..810c45efd71 100644 --- a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java +++ b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java @@ -98,6 +98,36 @@ void toProtoLogRecord() { assertThat(logRecord.getTraceId().toByteArray()).isEqualTo(TRACE_ID_BYTES); assertThat(logRecord.getSpanId().toByteArray()).isEqualTo(SPAN_ID_BYTES); assertThat(logRecord.getName()).isEqualTo(NAME); + assertThat(logRecord.getSeverityText()).isEqualTo("INFO"); + assertThat(logRecord.getBody()).isEqualTo(AnyValue.newBuilder().setStringValue(BODY).build()); + assertThat(logRecord.getAttributesList()) + .containsExactly( + KeyValue.newBuilder() + .setKey("key") + .setValue(AnyValue.newBuilder().setBoolValue(true).build()) + .build()); + assertThat(logRecord.getTimeUnixNano()).isEqualTo(12345); + } + + @Test + void toProtoLogRecord_MinimalFields() { + LogRecord logRecord = + parse( + LogRecord.getDefaultInstance(), + LogMarshaler.create( + io.opentelemetry.sdk.logs.data.LogRecord.builder( + Resource.create(Attributes.builder().put("testKey", "testValue").build()), + InstrumentationLibraryInfo.create("instrumentation", "1")) + .setBody(BODY) + .setSeverity(Severity.INFO) + .setAttributes(Attributes.of(AttributeKey.booleanKey("key"), true)) + .setEpochNanos(12345) + .build())); + + assertThat(logRecord.getTraceId().toByteArray()).isEmpty(); + assertThat(logRecord.getSpanId().toByteArray()).isEmpty(); + assertThat(logRecord.getName()).isBlank(); + assertThat(logRecord.getSeverityText()).isBlank(); assertThat(logRecord.getBody()).isEqualTo(AnyValue.newBuilder().setStringValue(BODY).build()); assertThat(logRecord.getAttributesList()) .containsExactly( diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java index c6fa8df5c67..7aaa81cd31e 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java @@ -21,7 +21,7 @@ public final class LogSinkSdkProvider { * * @return a new {@link LogSinkSdkProviderBuilder} for this class. */ - static LogSinkSdkProviderBuilder builder() { + public static LogSinkSdkProviderBuilder builder() { return new LogSinkSdkProviderBuilder(); } diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java index 8f64aca9bc1..4b5dd5a07f2 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java @@ -45,6 +45,7 @@ public interface LogData { * * @return the trace id. */ + @Nullable String getTraceId(); /** @@ -52,6 +53,7 @@ public interface LogData { * * @return the span id. */ + @Nullable String getSpanId(); /** diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java index b427d8779c5..c24bd4cf991 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java @@ -27,8 +27,8 @@ static LogRecord create( Resource resource, InstrumentationLibraryInfo instrumentationLibraryInfo, long epochNanos, - String traceId, - String spanId, + @Nullable String traceId, + @Nullable String spanId, int flags, Severity severity, @Nullable String severityText, diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java index 8aefdaac4ec..310cd76e328 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java @@ -18,8 +18,8 @@ public final class LogRecordBuilder { private final InstrumentationLibraryInfo instrumentationLibraryInfo; private long epochNanos; - private String traceId = ""; - private String spanId = ""; + @Nullable private String traceId; + @Nullable private String spanId; private int flags; private Severity severity = Severity.UNDEFINED_SEVERITY_NUMBER; @Nullable private String severityText;