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.Collection;
import java.util.List;
import java.util.Objects;
public final class LogSinkSdkProvider {
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.
@ -25,17 +24,15 @@ public final class LogSinkSdkProvider {
return new LogSinkSdkProviderBuilder();
}
LogSinkSdkProvider() {}
LogSinkSdkProvider(List<LogProcessor> processors) {
this.processors = processors;
}
public LogSink get(String instrumentationName, String instrumentationVersion) {
// Currently there is no differentiation by instrumentation library
return logSink;
}
public void addLogProcessor(LogProcessor processor) {
processors.add(Objects.requireNonNull(processor, "Processor can not be null"));
}
/**
* Flushes all attached processors.
*

View File

@ -5,10 +5,32 @@
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 {
private final List<LogProcessor> logProcessors = new ArrayList<>();
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() {
return new LogSinkSdkProvider();
return new LogSinkSdkProvider(logProcessors);
}
}

View File

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