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:
parent
d941693617
commit
c70629356e
|
|
@ -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.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue