Add toString implementation to various log SDK components (#4979)
This commit is contained in:
parent
44975c2853
commit
c2947bf046
|
@ -80,12 +80,14 @@ public final class OpenTelemetrySdk implements OpenTelemetry {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
// TODO(anuraaga): Add logs / propagators
|
||||
// TODO(anuraaga): Add propagators
|
||||
return "OpenTelemetrySdk{"
|
||||
+ "tracerProvider="
|
||||
+ tracerProvider.unobfuscate()
|
||||
+ ", meterProvider="
|
||||
+ meterProvider.unobfuscate()
|
||||
+ ", loggerProvider="
|
||||
+ loggerProvider
|
||||
+ "}";
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@ import io.opentelemetry.context.propagation.ContextPropagators;
|
|||
import io.opentelemetry.context.propagation.TextMapPropagator;
|
||||
import io.opentelemetry.sdk.common.Clock;
|
||||
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
|
||||
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
|
||||
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
|
||||
import io.opentelemetry.sdk.metrics.Aggregation;
|
||||
import io.opentelemetry.sdk.metrics.InstrumentSelector;
|
||||
import io.opentelemetry.sdk.metrics.InstrumentType;
|
||||
|
@ -322,6 +324,8 @@ class OpenTelemetrySdkTest {
|
|||
when(spanExporter.toString()).thenReturn("MockSpanExporter{}");
|
||||
when(metricExporter.getDefaultAggregation(any())).thenCallRealMethod();
|
||||
when(metricExporter.toString()).thenReturn("MockMetricExporter{}");
|
||||
LogRecordExporter logRecordExporter = mock(LogRecordExporter.class);
|
||||
when(logRecordExporter.toString()).thenReturn("MockLogRecordExporter{}");
|
||||
Resource resource =
|
||||
Resource.builder().put(AttributeKey.stringKey("service.name"), "otel-test").build();
|
||||
OpenTelemetrySdk sdk =
|
||||
|
@ -341,6 +345,13 @@ class OpenTelemetrySdkTest {
|
|||
InstrumentSelector.builder().setName("instrument").build(),
|
||||
View.builder().setName("new-instrument").build())
|
||||
.build())
|
||||
.setLoggerProvider(
|
||||
SdkLoggerProvider.builder()
|
||||
.setResource(resource)
|
||||
.addLogRecordProcessor(
|
||||
SimpleLogRecordProcessor.create(
|
||||
LogRecordExporter.composite(logRecordExporter, logRecordExporter)))
|
||||
.build())
|
||||
.build();
|
||||
|
||||
assertThat(sdk.toString())
|
||||
|
@ -359,6 +370,12 @@ class OpenTelemetrySdkTest {
|
|||
+ "resource=Resource{schemaUrl=null, attributes={service.name=\"otel-test\"}}, "
|
||||
+ "metricReaders=[PeriodicMetricReader{exporter=MockMetricExporter{}, intervalNanos=60000000000}], "
|
||||
+ "views=[RegisteredView{instrumentSelector=InstrumentSelector{instrumentName=instrument}, view=View{name=new-instrument, aggregation=DefaultAggregation, attributesProcessor=NoopAttributesProcessor{}}}]"
|
||||
+ "}, "
|
||||
+ "loggerProvider=SdkLoggerProvider{"
|
||||
+ "clock=SystemClock{}, "
|
||||
+ "resource=Resource{schemaUrl=null, attributes={service.name=\"otel-test\"}}, "
|
||||
+ "logLimits=LogLimits{maxNumberOfAttributes=128, maxAttributeValueLength=2147483647}, "
|
||||
+ "logRecordProcessor=SimpleLogRecordProcessor{logRecordExporter=MultiLogRecordExporter{logRecordExporters=[MockLogRecordExporter{}, MockLogRecordExporter{}]}}"
|
||||
+ "}"
|
||||
+ "}");
|
||||
}
|
||||
|
|
|
@ -117,4 +117,18 @@ public final class SdkLoggerProvider implements LoggerProvider, Closeable {
|
|||
public void close() {
|
||||
shutdown().join(10, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SdkLoggerProvider{"
|
||||
+ "clock="
|
||||
+ sharedState.getClock()
|
||||
+ ", resource="
|
||||
+ sharedState.getResource()
|
||||
+ ", logLimits="
|
||||
+ sharedState.getLogLimits()
|
||||
+ ", logRecordProcessor="
|
||||
+ sharedState.getLogRecordProcessor()
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,6 +107,20 @@ public final class BatchLogRecordProcessor implements LogRecordProcessor {
|
|||
return worker.batch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "BatchLogRecordProcessor{"
|
||||
+ "logRecordExporter="
|
||||
+ worker.logRecordExporter
|
||||
+ ", scheduleDelayNanos="
|
||||
+ worker.scheduleDelayNanos
|
||||
+ ", maxExportBatchSize="
|
||||
+ worker.maxExportBatchSize
|
||||
+ ", exporterTimeoutNanos="
|
||||
+ worker.exporterTimeoutNanos
|
||||
+ '}';
|
||||
}
|
||||
|
||||
// Worker is a thread that batches multiple logs and calls the registered LogRecordExporter to
|
||||
// export
|
||||
// the data.
|
||||
|
|
|
@ -8,6 +8,7 @@ package io.opentelemetry.sdk.logs.export;
|
|||
import io.opentelemetry.sdk.common.CompletableResultCode;
|
||||
import io.opentelemetry.sdk.logs.data.LogRecordData;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
@ -24,6 +25,10 @@ final class MultiLogRecordExporter implements LogRecordExporter {
|
|||
|
||||
private final LogRecordExporter[] logRecordExporters;
|
||||
|
||||
private MultiLogRecordExporter(LogRecordExporter[] logRecordExporters) {
|
||||
this.logRecordExporters = logRecordExporters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs and returns an instance of this class.
|
||||
*
|
||||
|
@ -93,7 +98,11 @@ final class MultiLogRecordExporter implements LogRecordExporter {
|
|||
return CompletableResultCode.ofAll(results);
|
||||
}
|
||||
|
||||
private MultiLogRecordExporter(LogRecordExporter[] logRecordExporters) {
|
||||
this.logRecordExporters = logRecordExporters;
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MultiLogRecordExporter{"
|
||||
+ "logRecordExporters="
|
||||
+ Arrays.toString(logRecordExporters)
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,4 +104,9 @@ public final class SimpleLogRecordProcessor implements LogRecordProcessor {
|
|||
public CompletableResultCode forceFlush() {
|
||||
return CompletableResultCode.ofAll(pendingExports);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SimpleLogRecordProcessor{" + "logRecordExporter=" + logRecordExporter + '}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -346,4 +346,17 @@ class SdkLoggerProviderTest {
|
|||
assertThat(seenLogs.size()).isEqualTo(1);
|
||||
assertThat(seenLogs.get(0).toLogRecordData().getEpochNanos()).isEqualTo(now);
|
||||
}
|
||||
|
||||
@Test
|
||||
void toString_Valid() {
|
||||
when(logRecordProcessor.toString()).thenReturn("MockLogRecordProcessor");
|
||||
assertThat(sdkLoggerProvider.toString())
|
||||
.isEqualTo(
|
||||
"SdkLoggerProvider{"
|
||||
+ "clock=SystemClock{}, "
|
||||
+ "resource=Resource{schemaUrl=null, attributes={service.name=\"unknown_service:java\", telemetry.sdk.language=\"java\", telemetry.sdk.name=\"opentelemetry\", telemetry.sdk.version=\"1.21.0-SNAPSHOT\"}}, "
|
||||
+ "logLimits=LogLimits{maxNumberOfAttributes=128, maxAttributeValueLength=2147483647}, "
|
||||
+ "logRecordProcessor=MockLogRecordProcessor"
|
||||
+ "}");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -420,6 +420,14 @@ class BatchLogRecordProcessorTest {
|
|||
assertThat(result.isSuccess()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
void toString_Valid() {
|
||||
when(mockLogRecordExporter.toString()).thenReturn("MockLogRecordExporter");
|
||||
assertThat(BatchLogRecordProcessor.builder(mockLogRecordExporter).build().toString())
|
||||
.isEqualTo(
|
||||
"BatchLogRecordProcessor{logRecordExporter=MockLogRecordExporter, scheduleDelayNanos=200000000, maxExportBatchSize=512, exporterTimeoutNanos=30000000000}");
|
||||
}
|
||||
|
||||
private static final class BlockingLogRecordExporter implements LogRecordExporter {
|
||||
|
||||
final Object monitor = new Object();
|
||||
|
|
|
@ -136,4 +136,13 @@ class MultiLogRecordExporterTest {
|
|||
verify(logRecordExporter1).shutdown();
|
||||
verify(logRecordExporter2).shutdown();
|
||||
}
|
||||
|
||||
@Test
|
||||
void toString_Valid() {
|
||||
when(logRecordExporter1.toString()).thenReturn("LogRecordExporter1");
|
||||
when(logRecordExporter2.toString()).thenReturn("LogRecordExporter2");
|
||||
assertThat(LogRecordExporter.composite(logRecordExporter1, logRecordExporter2).toString())
|
||||
.isEqualTo(
|
||||
"MultiLogRecordExporter{logRecordExporters=[LogRecordExporter1, LogRecordExporter2]}");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -119,4 +119,11 @@ class SimpleLogRecordProcessorTest {
|
|||
assertThat(shutdown.isSuccess()).isTrue();
|
||||
verify(logRecordExporter).shutdown();
|
||||
}
|
||||
|
||||
@Test
|
||||
void toString_Valid() {
|
||||
when(logRecordExporter.toString()).thenReturn("MockLogRecordExporter");
|
||||
assertThat(logRecordProcessor.toString())
|
||||
.isEqualTo("SimpleLogRecordProcessor{logRecordExporter=MockLogRecordExporter}");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue