Add log processors to the builder so LogSinkSdkProvider is immutable (#3751)

* Add log processors to the builder so LogSinkSdkProvider is immutable

* Add api diff
This commit is contained in:
jack-berg 2021-10-18 11:49:12 -05:00 committed by GitHub
parent d941693617
commit c70629356e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 17 deletions

View File

@ -10,11 +10,10 @@ import io.opentelemetry.sdk.logs.data.LogRecord;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Objects;
public final class LogSinkSdkProvider { public final class LogSinkSdkProvider {
private final LogSink logSink = new SdkLogSink(); private final LogSink logSink = new SdkLogSink();
private final List<LogProcessor> processors = new ArrayList<>(); private final List<LogProcessor> processors;
/** /**
* Returns a new {@link LogSinkSdkProviderBuilder} for this class. * Returns a new {@link LogSinkSdkProviderBuilder} for this class.
@ -25,17 +24,15 @@ public final class LogSinkSdkProvider {
return new LogSinkSdkProviderBuilder(); return new LogSinkSdkProviderBuilder();
} }
LogSinkSdkProvider() {} LogSinkSdkProvider(List<LogProcessor> processors) {
this.processors = processors;
}
public LogSink get(String instrumentationName, String instrumentationVersion) { public LogSink get(String instrumentationName, String instrumentationVersion) {
// Currently there is no differentiation by instrumentation library // Currently there is no differentiation by instrumentation library
return logSink; return logSink;
} }
public void addLogProcessor(LogProcessor processor) {
processors.add(Objects.requireNonNull(processor, "Processor can not be null"));
}
/** /**
* Flushes all attached processors. * Flushes all attached processors.
* *

View File

@ -5,10 +5,32 @@
package io.opentelemetry.sdk.logs; package io.opentelemetry.sdk.logs;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.sdk.logs.data.LogRecord;
import java.util.ArrayList;
import java.util.List;
public final class LogSinkSdkProviderBuilder { public final class LogSinkSdkProviderBuilder {
private final List<LogProcessor> logProcessors = new ArrayList<>();
LogSinkSdkProviderBuilder() {} LogSinkSdkProviderBuilder() {}
/**
* Add a LogProcessor to the log pipeline that will be built. {@link LogProcessor} will be called
* each time a {@link LogRecord} is offered to a {@link LogSink}.
*
* @param processor the processor to be added to the processing pipeline.
* @return this
*/
public LogSinkSdkProviderBuilder addLogProcessor(LogProcessor processor) {
requireNonNull(processor, "processor can not be null");
logProcessors.add(processor);
return this;
}
public LogSinkSdkProvider build() { public LogSinkSdkProvider build() {
return new LogSinkSdkProvider(); return new LogSinkSdkProvider(logProcessors);
} }
} }

View File

@ -28,8 +28,7 @@ class LogSinkSdkProviderTest {
void testLogSinkSdkProvider() { void testLogSinkSdkProvider() {
TestLogExporter exporter = new TestLogExporter(); TestLogExporter exporter = new TestLogExporter();
LogProcessor processor = BatchLogProcessor.builder(exporter).build(); LogProcessor processor = BatchLogProcessor.builder(exporter).build();
LogSinkSdkProvider provider = LogSinkSdkProvider.builder().build(); LogSinkSdkProvider provider = LogSinkSdkProvider.builder().addLogProcessor(processor).build();
provider.addLogProcessor(processor);
LogSink sink = provider.get("test", "0.1a"); LogSink sink = provider.get("test", "0.1a");
LogRecord log = createLog(Severity.ERROR, "test"); LogRecord log = createLog(Severity.ERROR, "test");
sink.offer(log); sink.offer(log);
@ -48,8 +47,7 @@ class LogSinkSdkProviderTest {
.setMaxExportBatchSize(5) .setMaxExportBatchSize(5)
.setMaxQueueSize(10) .setMaxQueueSize(10)
.build(); .build();
LogSinkSdkProvider provider = LogSinkSdkProvider.builder().build(); LogSinkSdkProvider provider = LogSinkSdkProvider.builder().addLogProcessor(processor).build();
provider.addLogProcessor(processor);
LogSink sink = provider.get("test", "0.1a"); LogSink sink = provider.get("test", "0.1a");
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
@ -80,8 +78,7 @@ class LogSinkSdkProviderTest {
.setMaxExportBatchSize(5) .setMaxExportBatchSize(5)
.setMaxQueueSize(10) .setMaxQueueSize(10)
.build(); .build();
LogSinkSdkProvider provider = LogSinkSdkProvider.builder().build(); LogSinkSdkProvider provider = LogSinkSdkProvider.builder().addLogProcessor(processor).build();
provider.addLogProcessor(processor);
LogSink sink = provider.get("test", "0.1a"); LogSink sink = provider.get("test", "0.1a");
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
@ -99,9 +96,11 @@ class LogSinkSdkProviderTest {
void testMultipleProcessors() { void testMultipleProcessors() {
TestLogProcessor processorOne = new TestLogProcessor(); TestLogProcessor processorOne = new TestLogProcessor();
TestLogProcessor processorTwo = new TestLogProcessor(); TestLogProcessor processorTwo = new TestLogProcessor();
LogSinkSdkProvider provider = LogSinkSdkProvider.builder().build(); LogSinkSdkProvider provider =
provider.addLogProcessor(processorOne); LogSinkSdkProvider.builder()
provider.addLogProcessor(processorTwo); .addLogProcessor(processorOne)
.addLogProcessor(processorTwo)
.build();
LogSink sink = provider.get("test", "0.1"); LogSink sink = provider.get("test", "0.1");
LogRecord record = createLog(Severity.INFO, "test"); LogRecord record = createLog(Severity.INFO, "test");
sink.offer(record); sink.offer(record);