-
Notifications
You must be signed in to change notification settings - Fork 826
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add stdout log record exporter (#6675)
Co-authored-by: Jack Berg <[email protected]> Co-authored-by: jack-berg <[email protected]>
- Loading branch information
1 parent
82b9e9b
commit d899702
Showing
27 changed files
with
1,152 additions
and
221 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
92 changes: 92 additions & 0 deletions
92
...ava/io/opentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
/* | ||
* Copyright The OpenTelemetry Authors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package io.opentelemetry.exporter.logging.otlp.internal.logs; | ||
|
||
import io.opentelemetry.exporter.internal.otlp.logs.LogsRequestMarshaler; | ||
import io.opentelemetry.exporter.internal.otlp.logs.ResourceLogsMarshaler; | ||
import io.opentelemetry.exporter.logging.otlp.internal.writer.JsonWriter; | ||
import io.opentelemetry.sdk.common.CompletableResultCode; | ||
import io.opentelemetry.sdk.logs.data.LogRecordData; | ||
import io.opentelemetry.sdk.logs.export.LogRecordExporter; | ||
import java.util.Collection; | ||
import java.util.StringJoiner; | ||
import java.util.concurrent.atomic.AtomicBoolean; | ||
import java.util.logging.Level; | ||
import java.util.logging.Logger; | ||
|
||
/** | ||
* Exporter for sending OTLP log records to stdout. | ||
* | ||
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change | ||
* at any time. | ||
*/ | ||
public class OtlpStdoutLogRecordExporter implements LogRecordExporter { | ||
|
||
private static final Logger LOGGER = | ||
Logger.getLogger(OtlpStdoutLogRecordExporter.class.getName()); | ||
|
||
private final AtomicBoolean isShutdown = new AtomicBoolean(); | ||
|
||
private final Logger logger; | ||
private final JsonWriter jsonWriter; | ||
private final boolean wrapperJsonObject; | ||
|
||
OtlpStdoutLogRecordExporter(Logger logger, JsonWriter jsonWriter, boolean wrapperJsonObject) { | ||
this.logger = logger; | ||
this.jsonWriter = jsonWriter; | ||
this.wrapperJsonObject = wrapperJsonObject; | ||
} | ||
|
||
/** Returns a new {@link OtlpStdoutLogRecordExporterBuilder}. */ | ||
@SuppressWarnings("SystemOut") | ||
public static OtlpStdoutLogRecordExporterBuilder builder() { | ||
return new OtlpStdoutLogRecordExporterBuilder(LOGGER).setOutput(System.out); | ||
} | ||
|
||
@Override | ||
public CompletableResultCode export(Collection<LogRecordData> logs) { | ||
if (isShutdown.get()) { | ||
return CompletableResultCode.ofFailure(); | ||
} | ||
|
||
if (wrapperJsonObject) { | ||
LogsRequestMarshaler request = LogsRequestMarshaler.create(logs); | ||
return jsonWriter.write(request); | ||
} else { | ||
for (ResourceLogsMarshaler resourceLogs : ResourceLogsMarshaler.create(logs)) { | ||
CompletableResultCode resultCode = jsonWriter.write(resourceLogs); | ||
if (!resultCode.isSuccess()) { | ||
// already logged | ||
return resultCode; | ||
} | ||
} | ||
return CompletableResultCode.ofSuccess(); | ||
} | ||
} | ||
|
||
@Override | ||
public CompletableResultCode flush() { | ||
return jsonWriter.flush(); | ||
} | ||
|
||
@Override | ||
public CompletableResultCode shutdown() { | ||
if (!isShutdown.compareAndSet(false, true)) { | ||
logger.log(Level.INFO, "Calling shutdown() multiple times."); | ||
} else { | ||
jsonWriter.close(); | ||
} | ||
return CompletableResultCode.ofSuccess(); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
StringJoiner joiner = new StringJoiner(", ", "OtlpStdoutLogRecordExporter{", "}"); | ||
joiner.add("jsonWriter=" + jsonWriter); | ||
joiner.add("wrapperJsonObject=" + wrapperJsonObject); | ||
return joiner.toString(); | ||
} | ||
} |
76 changes: 76 additions & 0 deletions
76
...opentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
* Copyright The OpenTelemetry Authors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package io.opentelemetry.exporter.logging.otlp.internal.logs; | ||
|
||
import static java.util.Objects.requireNonNull; | ||
|
||
import io.opentelemetry.exporter.logging.otlp.OtlpJsonLoggingLogRecordExporter; | ||
import io.opentelemetry.exporter.logging.otlp.internal.writer.JsonWriter; | ||
import io.opentelemetry.exporter.logging.otlp.internal.writer.LoggerJsonWriter; | ||
import io.opentelemetry.exporter.logging.otlp.internal.writer.StreamJsonWriter; | ||
import java.io.OutputStream; | ||
import java.util.logging.Logger; | ||
|
||
/** | ||
* Builder for {@link OtlpJsonLoggingLogRecordExporter}. | ||
* | ||
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change | ||
* at any time. | ||
*/ | ||
public final class OtlpStdoutLogRecordExporterBuilder { | ||
|
||
private static final String TYPE = "log records"; | ||
|
||
private final Logger logger; | ||
private JsonWriter jsonWriter; | ||
private boolean wrapperJsonObject = true; | ||
|
||
public OtlpStdoutLogRecordExporterBuilder(Logger logger) { | ||
this.logger = logger; | ||
this.jsonWriter = new LoggerJsonWriter(logger, TYPE); | ||
} | ||
|
||
/** | ||
* Sets the exporter to use the specified JSON object wrapper. | ||
* | ||
* @param wrapperJsonObject whether to wrap the JSON object in an outer JSON "resourceLogs" | ||
* object. | ||
*/ | ||
public OtlpStdoutLogRecordExporterBuilder setWrapperJsonObject(boolean wrapperJsonObject) { | ||
this.wrapperJsonObject = wrapperJsonObject; | ||
return this; | ||
} | ||
|
||
/** | ||
* Sets the exporter to use the specified output stream. | ||
* | ||
* <p>The output stream will be closed when {@link OtlpStdoutLogRecordExporter#shutdown()} is | ||
* called unless it's {@link System#out} or {@link System#err}. | ||
* | ||
* @param outputStream the output stream to use. | ||
*/ | ||
public OtlpStdoutLogRecordExporterBuilder setOutput(OutputStream outputStream) { | ||
requireNonNull(outputStream, "outputStream"); | ||
this.jsonWriter = new StreamJsonWriter(outputStream, TYPE); | ||
return this; | ||
} | ||
|
||
/** Sets the exporter to use the specified logger. */ | ||
public OtlpStdoutLogRecordExporterBuilder setOutput(Logger logger) { | ||
requireNonNull(logger, "logger"); | ||
this.jsonWriter = new LoggerJsonWriter(logger, TYPE); | ||
return this; | ||
} | ||
|
||
/** | ||
* Constructs a new instance of the exporter based on the builder's values. | ||
* | ||
* @return a new exporter's instance | ||
*/ | ||
public OtlpStdoutLogRecordExporter build() { | ||
return new OtlpStdoutLogRecordExporter(logger, jsonWriter, wrapperJsonObject); | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
...try/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterComponentProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/* | ||
* Copyright The OpenTelemetry Authors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package io.opentelemetry.exporter.logging.otlp.internal.logs; | ||
|
||
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; | ||
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties; | ||
import io.opentelemetry.sdk.logs.export.LogRecordExporter; | ||
|
||
/** | ||
* File configuration SPI implementation for {@link OtlpStdoutLogRecordExporter}. | ||
* | ||
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change | ||
* at any time. | ||
*/ | ||
public class OtlpStdoutLogRecordExporterComponentProvider | ||
implements ComponentProvider<LogRecordExporter> { | ||
|
||
@Override | ||
public Class<LogRecordExporter> getType() { | ||
return LogRecordExporter.class; | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return "experimental-otlp/stdout"; | ||
} | ||
|
||
@Override | ||
public LogRecordExporter create(StructuredConfigProperties config) { | ||
OtlpStdoutLogRecordExporterBuilder builder = OtlpStdoutLogRecordExporter.builder(); | ||
return builder.build(); | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
...pentelemetry/exporter/logging/otlp/internal/logs/OtlpStdoutLogRecordExporterProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* | ||
* Copyright The OpenTelemetry Authors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package io.opentelemetry.exporter.logging.otlp.internal.logs; | ||
|
||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; | ||
import io.opentelemetry.sdk.autoconfigure.spi.logs.ConfigurableLogRecordExporterProvider; | ||
import io.opentelemetry.sdk.logs.export.LogRecordExporter; | ||
|
||
/** | ||
* {@link LogRecordExporter} SPI implementation for {@link OtlpStdoutLogRecordExporter}. | ||
* | ||
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change | ||
* at any time. | ||
*/ | ||
public class OtlpStdoutLogRecordExporterProvider implements ConfigurableLogRecordExporterProvider { | ||
@Override | ||
public LogRecordExporter createExporter(ConfigProperties config) { | ||
OtlpStdoutLogRecordExporterBuilder builder = OtlpStdoutLogRecordExporter.builder(); | ||
return builder.build(); | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return "experimental-otlp/stdout"; | ||
} | ||
} |
Oops, something went wrong.