Skip to content

Commit

Permalink
Add toString implementation to various log SDK components (#4979)
Browse files Browse the repository at this point in the history
  • Loading branch information
jack-berg committed Nov 26, 2022
1 parent 44975c2 commit c2947bf
Show file tree
Hide file tree
Showing 10 changed files with 101 additions and 3 deletions.
Expand Up @@ -80,12 +80,14 @@ public ContextPropagators getPropagators() {

@Override
public String toString() {
// TODO(anuraaga): Add logs / propagators
// TODO(anuraaga): Add propagators
return "OpenTelemetrySdk{"
+ "tracerProvider="
+ tracerProvider.unobfuscate()
+ ", meterProvider="
+ meterProvider.unobfuscate()
+ ", loggerProvider="
+ loggerProvider
+ "}";
}

Expand Down
Expand Up @@ -19,6 +19,8 @@
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;
Expand Down Expand Up @@ -322,6 +324,8 @@ void stringRepresentation() {
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 =
Expand All @@ -341,6 +345,13 @@ void stringRepresentation() {
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())
Expand All @@ -359,6 +370,12 @@ void stringRepresentation() {
+ "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{}]}}"
+ "}"
+ "}");
}
Expand Down
Expand Up @@ -117,4 +117,18 @@ public CompletableResultCode shutdown() {
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()
+ '}';
}
}
Expand Up @@ -107,6 +107,20 @@ ArrayList<LogRecordData> getBatch() {
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.
Expand Down
Expand Up @@ -8,6 +8,7 @@
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;
Expand All @@ -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.
*
Expand Down Expand Up @@ -93,7 +98,11 @@ public CompletableResultCode shutdown() {
return CompletableResultCode.ofAll(results);
}

private MultiLogRecordExporter(LogRecordExporter[] logRecordExporters) {
this.logRecordExporters = logRecordExporters;
@Override
public String toString() {
return "MultiLogRecordExporter{"
+ "logRecordExporters="
+ Arrays.toString(logRecordExporters)
+ '}';
}
}
Expand Up @@ -104,4 +104,9 @@ public CompletableResultCode shutdown() {
public CompletableResultCode forceFlush() {
return CompletableResultCode.ofAll(pendingExports);
}

@Override
public String toString() {
return "SimpleLogRecordProcessor{" + "logRecordExporter=" + logRecordExporter + '}';
}
}
Expand Up @@ -346,4 +346,17 @@ void canSetClock() {
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"
+ "}");
}
}
Expand Up @@ -420,6 +420,14 @@ void shutdownPropagatesFailure() {
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();
Expand Down
Expand Up @@ -136,4 +136,13 @@ void twoLogRecordExporter_FirstThrows() {
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]}");
}
}
Expand Up @@ -119,4 +119,11 @@ void shutdown() {
assertThat(shutdown.isSuccess()).isTrue();
verify(logRecordExporter).shutdown();
}

@Test
void toString_Valid() {
when(logRecordExporter.toString()).thenReturn("MockLogRecordExporter");
assertThat(logRecordProcessor.toString())
.isEqualTo("SimpleLogRecordProcessor{logRecordExporter=MockLogRecordExporter}");
}
}

0 comments on commit c2947bf

Please sign in to comment.