Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ public final class OtlpJsonLoggingLogRecordExporter implements LogRecordExporter
/** Returns a new {@link OtlpJsonLoggingLogRecordExporter}. */
public static LogRecordExporter create() {
OtlpStdoutLogRecordExporter delegate =
new OtlpStdoutLogRecordExporterBuilder(logger).setWrapperJsonObject(false).build();
new OtlpStdoutLogRecordExporterBuilder(logger)
.setWrapperJsonObject(false)
.setPrettyPrint(true)
.build();
return new OtlpJsonLoggingLogRecordExporter(delegate);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ public static MetricExporter create() {
*/
public static MetricExporter create(AggregationTemporality aggregationTemporality) {
OtlpStdoutMetricExporter delegate =
new OtlpStdoutMetricExporterBuilder(logger).setWrapperJsonObject(false).build();
new OtlpStdoutMetricExporterBuilder(logger)
.setWrapperJsonObject(false)
.setPrettyPrint(true)
.build();
return new OtlpJsonLoggingMetricExporter(delegate, aggregationTemporality);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ public final class OtlpJsonLoggingSpanExporter implements SpanExporter {
/** Returns a new {@link OtlpJsonLoggingSpanExporter}. */
public static SpanExporter create() {
OtlpStdoutSpanExporter delegate =
new OtlpStdoutSpanExporterBuilder(logger).setWrapperJsonObject(false).build();
new OtlpStdoutSpanExporterBuilder(logger)
.setWrapperJsonObject(false)
.setPrettyPrint(true)
.build();
return new OtlpJsonLoggingSpanExporter(delegate);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import io.opentelemetry.sdk.common.export.MemoryMode;
import java.io.OutputStream;
import java.util.logging.Logger;
import javax.annotation.Nullable;

/**
* Builder for {@link OtlpJsonLoggingLogRecordExporter}.
Expand All @@ -26,13 +27,14 @@ public final class OtlpStdoutLogRecordExporterBuilder {
private static final String TYPE = "log records";

private final Logger logger;
private JsonWriter jsonWriter;
@Nullable private OutputStream outputStream;
@Nullable private Logger outputLogger;
private boolean wrapperJsonObject = true;
private MemoryMode memoryMode = MemoryMode.IMMUTABLE_DATA;
private boolean prettyPrint;

public OtlpStdoutLogRecordExporterBuilder(Logger logger) {
this.logger = logger;
this.jsonWriter = new LoggerJsonWriter(logger, TYPE);
}

/**
Expand All @@ -57,6 +59,12 @@ public OtlpStdoutLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
return this;
}

/** Sets the exporter to use pretty-printed JSON output. */
public OtlpStdoutLogRecordExporterBuilder setPrettyPrint(boolean prettyPrint) {
this.prettyPrint = prettyPrint;
return this;
}

/**
* Sets the exporter to use the specified output stream.
*
Expand All @@ -67,14 +75,16 @@ public OtlpStdoutLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpStdoutLogRecordExporterBuilder setOutput(OutputStream outputStream) {
requireNonNull(outputStream, "outputStream");
this.jsonWriter = new StreamJsonWriter(outputStream, TYPE);
this.outputStream = outputStream;
this.outputLogger = null;
return this;
}

/** Sets the exporter to use the specified logger. */
public OtlpStdoutLogRecordExporterBuilder setOutput(Logger logger) {
requireNonNull(logger, "logger");
this.jsonWriter = new LoggerJsonWriter(logger, TYPE);
this.outputLogger = logger;
this.outputStream = null;
return this;
}

Expand All @@ -88,6 +98,13 @@ public OtlpStdoutLogRecordExporter build() {
throw new IllegalArgumentException(
"Reusable data mode is not supported without wrapperJsonObject");
}
JsonWriter jsonWriter;
if (outputStream != null) {
jsonWriter = new StreamJsonWriter(outputStream, TYPE, prettyPrint);
} else {
Logger writerLogger = outputLogger != null ? outputLogger : this.logger;
jsonWriter = new LoggerJsonWriter(writerLogger, TYPE, prettyPrint);
}
return new OtlpStdoutLogRecordExporter(logger, jsonWriter, wrapperJsonObject, memoryMode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import java.io.OutputStream;
import java.util.logging.Logger;
import javax.annotation.Nullable;

/**
* Builder for {@link OtlpJsonLoggingMetricExporter}.
Expand All @@ -39,13 +40,14 @@ public final class OtlpStdoutMetricExporterBuilder {
DefaultAggregationSelector.getDefault();

private final Logger logger;
private JsonWriter jsonWriter;
@Nullable private OutputStream outputStream;
@Nullable private Logger outputLogger;
private boolean wrapperJsonObject = true;
private MemoryMode memoryMode = MemoryMode.IMMUTABLE_DATA;
private boolean prettyPrint;

public OtlpStdoutMetricExporterBuilder(Logger logger) {
this.logger = logger;
this.jsonWriter = new LoggerJsonWriter(logger, TYPE);
}

/**
Expand All @@ -70,6 +72,12 @@ public OtlpStdoutMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
return this;
}

/** Sets the exporter to use pretty-printed JSON output. */
public OtlpStdoutMetricExporterBuilder setPrettyPrint(boolean prettyPrint) {
this.prettyPrint = prettyPrint;
return this;
}

/**
* Sets the exporter to use the specified output stream.
*
Expand All @@ -80,14 +88,16 @@ public OtlpStdoutMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpStdoutMetricExporterBuilder setOutput(OutputStream outputStream) {
requireNonNull(outputStream, "outputStream");
this.jsonWriter = new StreamJsonWriter(outputStream, TYPE);
this.outputStream = outputStream;
this.outputLogger = null;
return this;
}

/** Sets the exporter to use the specified logger. */
public OtlpStdoutMetricExporterBuilder setOutput(Logger logger) {
requireNonNull(logger, "logger");
this.jsonWriter = new LoggerJsonWriter(logger, TYPE);
this.outputLogger = logger;
this.outputStream = null;
return this;
}

Expand Down Expand Up @@ -131,6 +141,13 @@ public OtlpStdoutMetricExporter build() {
throw new IllegalArgumentException(
"Reusable data mode is not supported without wrapperJsonObject");
}
JsonWriter jsonWriter;
if (outputStream != null) {
jsonWriter = new StreamJsonWriter(outputStream, TYPE, prettyPrint);
} else {
Logger writerLogger = outputLogger != null ? outputLogger : this.logger;
jsonWriter = new LoggerJsonWriter(writerLogger, TYPE, prettyPrint);
}
return new OtlpStdoutMetricExporter(
logger,
jsonWriter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import io.opentelemetry.sdk.common.export.MemoryMode;
import java.io.OutputStream;
import java.util.logging.Logger;
import javax.annotation.Nullable;

/**
* Builder for {@link OtlpJsonLoggingSpanExporter}.
Expand All @@ -26,13 +27,14 @@ public final class OtlpStdoutSpanExporterBuilder {
private static final String TYPE = "spans";

private final Logger logger;
private JsonWriter jsonWriter;
@Nullable private OutputStream outputStream;
@Nullable private Logger outputLogger;
private boolean wrapperJsonObject = true;
private MemoryMode memoryMode = MemoryMode.IMMUTABLE_DATA;
private boolean prettyPrint;

public OtlpStdoutSpanExporterBuilder(Logger logger) {
this.logger = logger;
this.jsonWriter = new LoggerJsonWriter(logger, TYPE);
}

/**
Expand All @@ -57,6 +59,12 @@ public OtlpStdoutSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
return this;
}

/** Sets the exporter to use pretty-printed JSON output. */
public OtlpStdoutSpanExporterBuilder setPrettyPrint(boolean prettyPrint) {
this.prettyPrint = prettyPrint;
return this;
}

/**
* Sets the exporter to use the specified output stream.
*
Expand All @@ -67,14 +75,16 @@ public OtlpStdoutSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpStdoutSpanExporterBuilder setOutput(OutputStream outputStream) {
requireNonNull(outputStream, "outputStream");
this.jsonWriter = new StreamJsonWriter(outputStream, TYPE);
this.outputStream = outputStream;
this.outputLogger = null;
return this;
}

/** Sets the exporter to use the specified logger. */
public OtlpStdoutSpanExporterBuilder setOutput(Logger logger) {
requireNonNull(logger, "logger");
this.jsonWriter = new LoggerJsonWriter(logger, TYPE);
this.outputLogger = logger;
this.outputStream = null;
return this;
}

Expand All @@ -88,6 +98,13 @@ public OtlpStdoutSpanExporter build() {
throw new IllegalArgumentException(
"Reusable data mode is not supported without wrapperJsonObject");
}
JsonWriter jsonWriter;
if (outputStream != null) {
jsonWriter = new StreamJsonWriter(outputStream, TYPE, prettyPrint);
} else {
Logger writerLogger = outputLogger != null ? outputLogger : this.logger;
jsonWriter = new LoggerJsonWriter(writerLogger, TYPE, prettyPrint);
}
return new OtlpStdoutSpanExporter(logger, jsonWriter, wrapperJsonObject, memoryMode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,25 @@ public class LoggerJsonWriter implements JsonWriter {

private final Logger logger;
private final String type;
private final boolean prettyPrint;

public LoggerJsonWriter(Logger logger, String type) {
this(logger, type, /* prettyPrint= */ false);
}

public LoggerJsonWriter(Logger logger, String type, boolean prettyPrint) {
this.logger = logger;
this.type = type;
this.prettyPrint = prettyPrint;
}

@Override
public CompletableResultCode write(Marshaler exportRequest) {
SegmentedStringWriter sw = new SegmentedStringWriter(JSON_FACTORY._getBufferRecycler());
try (JsonGenerator gen = JsonUtil.create(sw)) {
if (prettyPrint) {
gen.useDefaultPrettyPrinter();
}
exportRequest.writeJsonToGenerator(gen);
} catch (IOException e) {
logger.log(Level.WARNING, "Unable to write OTLP JSON " + type, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,29 @@ public class StreamJsonWriter implements JsonWriter {

private final String type;
private final OutputStream outputStream;
private final boolean prettyPrint;

public StreamJsonWriter(OutputStream originalStream, String type) {
this(originalStream, type, /* prettyPrint= */ false);
}

public StreamJsonWriter(OutputStream originalStream, String type, boolean prettyPrint) {
this.outputStream = originalStream;
this.type = type;
this.prettyPrint = prettyPrint;
}

@Override
public CompletableResultCode write(Marshaler exportRequest) {
try {
exportRequest.writeJsonWithNewline(
JsonGenerator generator =
JSON_FACTORY
.createGenerator(outputStream)
.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET));
.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
if (prettyPrint) {
generator.useDefaultPrettyPrinter();
}
exportRequest.writeJsonWithNewline(generator);
return CompletableResultCode.ofSuccess();
} catch (IOException e) {
logger.log(Level.WARNING, "Unable to write OTLP JSON " + type, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ void log() throws Exception {
String message = logs.getEvents().get(0).getMessage();
String expectedJson = testDataExporter.getExpectedJson(false);
JSONAssert.assertEquals("Got \n" + message, expectedJson, message, /* strict= */ false);
assertThat(message).doesNotContain("\n");
assertThat(message).contains("\n");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ void log() throws Exception {
String message = logs.getEvents().get(0).getMessage();
String expectedJson = testDataExporter.getExpectedJson(false);
JSONAssert.assertEquals("Got \n" + message, expectedJson, message, /* strict= */ false);
assertThat(message).doesNotContain("\n");
assertThat(message).contains("\n");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ void log() throws Exception {
String message = logs.getEvents().get(0).getMessage();
String expectedJson = testDataExporter.getExpectedJson(false);
JSONAssert.assertEquals("Got \n" + message, expectedJson, message, /* strict= */ false);
assertThat(message).doesNotContain("\n");
assertThat(message).contains("\n");
}

@Test
Expand Down
Loading