Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 4d53e0d

Browse files
committed
Replace custom exporter with logging exporter
1 parent 1d6b1fd commit 4d53e0d

8 files changed

Lines changed: 139 additions & 179 deletions

File tree

samples/install-without-bom/pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,27 +62,27 @@
6262
<dependency>
6363
<groupId>io.opentelemetry</groupId>
6464
<artifactId>opentelemetry-api</artifactId>
65-
<version>1.46.0</version>
65+
<version>1.48.0</version>
6666
</dependency>
6767
<dependency>
6868
<groupId>io.opentelemetry</groupId>
6969
<artifactId>opentelemetry-context</artifactId>
70-
<version>1.46.0</version>
70+
<version>1.48.0</version>
7171
</dependency>
7272
<dependency>
7373
<groupId>io.opentelemetry</groupId>
7474
<artifactId>opentelemetry-sdk</artifactId>
75-
<version>1.46.0</version>
75+
<version>1.48.0</version>
7676
</dependency>
7777
<dependency>
7878
<groupId>io.opentelemetry</groupId>
7979
<artifactId>opentelemetry-sdk-common</artifactId>
80-
<version>1.46.0</version>
80+
<version>1.48.0</version>
8181
</dependency>
8282
<dependency>
8383
<groupId>io.opentelemetry</groupId>
8484
<artifactId>opentelemetry-sdk-trace</artifactId>
85-
<version>1.46.0</version>
85+
<version>1.48.0</version>
8686
</dependency>
8787

8888
<!-- Test dependencies -->

samples/pom.xml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,6 @@
4343
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4444
</properties>
4545

46-
<dependencyManagement>
47-
<dependencies>
48-
<dependency>
49-
<groupId>io.opentelemetry</groupId>
50-
<artifactId>opentelemetry-bom</artifactId>
51-
<version>1.48.0</version>
52-
<type>pom</type>
53-
<scope>import</scope>
54-
</dependency>
55-
</dependencies>
56-
</dependencyManagement>
57-
5846
<modules>
5947
<module>install-without-bom</module>
6048
<module>snapshot</module>

samples/snapshot/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@
3939
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4040
</properties>
4141

42+
<dependencyManagement>
43+
<dependencies>
44+
<dependency>
45+
<groupId>io.opentelemetry</groupId>
46+
<artifactId>opentelemetry-bom</artifactId>
47+
<version>1.48.0</version>
48+
<type>pom</type>
49+
<scope>import</scope>
50+
</dependency>
51+
</dependencies>
52+
</dependencyManagement>
53+
4254
<dependencies>
4355
<!-- {x-version-update-start:google-cloud-bigquery:current} -->
4456
<dependency>

samples/snippets/pom.xml

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@
5151
<type>pom</type>
5252
<scope>import</scope>
5353
</dependency>
54-
</dependencies>
54+
<dependency>
55+
<groupId>io.opentelemetry</groupId>
56+
<artifactId>opentelemetry-bom</artifactId>
57+
<version>1.48.0</version>
58+
<type>pom</type>
59+
<scope>import</scope>
60+
</dependency>
61+
</dependencies>
5562
</dependencyManagement>
5663

5764
<dependencies>
@@ -62,27 +69,32 @@
6269
<dependency>
6370
<groupId>io.opentelemetry</groupId>
6471
<artifactId>opentelemetry-api</artifactId>
65-
<version>1.46.0</version>
72+
<version>1.48.0</version>
6673
</dependency>
6774
<dependency>
6875
<groupId>io.opentelemetry</groupId>
6976
<artifactId>opentelemetry-context</artifactId>
70-
<version>1.46.0</version>
77+
<version>1.48.0</version>
7178
</dependency>
7279
<dependency>
7380
<groupId>io.opentelemetry</groupId>
7481
<artifactId>opentelemetry-sdk</artifactId>
75-
<version>1.46.0</version>
82+
<version>1.48.0</version>
7683
</dependency>
7784
<dependency>
7885
<groupId>io.opentelemetry</groupId>
7986
<artifactId>opentelemetry-sdk-common</artifactId>
80-
<version>1.46.0</version>
87+
<version>1.48.0</version>
8188
</dependency>
8289
<dependency>
8390
<groupId>io.opentelemetry</groupId>
8491
<artifactId>opentelemetry-sdk-trace</artifactId>
85-
<version>1.46.0</version>
92+
<version>1.48.0</version>
93+
</dependency>
94+
<dependency>
95+
<groupId>io.opentelemetry</groupId>
96+
<artifactId>opentelemetry-exporter-logging</artifactId>
97+
<version>1.51.0</version>
8698
</dependency>
8799
<!-- [END bigquery_java_dependencies] -->
88100
<!-- [END bigquery_install_with_bom] -->

samples/snippets/src/main/java/com/example/bigquery/EnableOpenTelemetryTracing.java

Lines changed: 19 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -22,81 +22,45 @@
2222
import com.google.cloud.bigquery.Dataset;
2323
import com.google.cloud.bigquery.DatasetInfo;
2424
import io.opentelemetry.api.OpenTelemetry;
25-
import io.opentelemetry.api.common.AttributeKey;
26-
import io.opentelemetry.api.trace.Span;
2725
import io.opentelemetry.api.trace.Tracer;
28-
import io.opentelemetry.context.Scope;
26+
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
2927
import io.opentelemetry.sdk.OpenTelemetrySdk;
30-
import io.opentelemetry.sdk.common.CompletableResultCode;
3128
import io.opentelemetry.sdk.trace.SdkTracerProvider;
32-
import io.opentelemetry.sdk.trace.data.SpanData;
3329
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
3430
import io.opentelemetry.sdk.trace.samplers.Sampler;
35-
import java.util.Collection;
36-
import java.util.HashMap;
37-
import java.util.Map;
31+
import java.util.logging.ConsoleHandler;
32+
import java.util.logging.Logger;
3833

3934
public class EnableOpenTelemetryTracing {
40-
// Maps Span names to their Span IDs.
41-
private static final Map<String, String> OTEL_SPAN_IDS = new HashMap<>();
42-
43-
// Create a SpanExporter to determine how to handle captured Span data.
44-
// See more at https://opentelemetry.io/docs/languages/java/sdk/#spanexporter
45-
private static class SampleSpanExporter
46-
implements io.opentelemetry.sdk.trace.export.SpanExporter {
47-
48-
// TODO(developer): Replace export output before running the sample.
49-
@Override
50-
public CompletableResultCode export(Collection<SpanData> collection) {
51-
// Export data. This data can be sent out of process via netowork calls, though
52-
// for this example local data structures are used.
53-
if (collection.isEmpty()) {
54-
// No span data was collected.
55-
return CompletableResultCode.ofFailure();
56-
}
57-
58-
for (SpanData data : collection) {
59-
OTEL_SPAN_IDS.put(data.getName(), data.getSpanId());
60-
}
61-
return CompletableResultCode.ofSuccess();
62-
}
63-
64-
// TODO(developer): Replace these functions to suit your needs.
65-
@Override
66-
public CompletableResultCode flush() {
67-
// Export any data that has been queued up but not yet exported.
68-
return CompletableResultCode.ofSuccess();
69-
}
70-
71-
@Override
72-
public CompletableResultCode shutdown() {
73-
// Shut down the exporter and clean up any resources.
74-
return CompletableResultCode.ofSuccess();
75-
}
76-
}
35+
private static final Logger log = Logger.getLogger(EnableOpenTelemetryTracing.class.getName());
7736

7837
public static void main(String[] args) {
79-
// TODO(developer): Replace Tracer name
38+
// Set logging to System.err.
39+
ConsoleHandler ch = new ConsoleHandler();
40+
log.addHandler(ch);
41+
42+
// TODO(developer): Replace values before running the sample.
8043
final String tracerName = "Sample Tracer";
81-
enableOpenTelemetry(tracerName);
82-
}
44+
final String datasetId = "sampleDatasetId";
8345

84-
public static void enableOpenTelemetry(String tracerName) {
85-
// Create TracerProvider using the custom SpanExporter.
46+
// Create TracerProvider that exports to a logger.
8647
SdkTracerProvider tracerProvider =
8748
SdkTracerProvider.builder()
88-
.addSpanProcessor(SimpleSpanProcessor.create(new SampleSpanExporter()))
49+
.addSpanProcessor(SimpleSpanProcessor.builder(LoggingSpanExporter.create()).build())
8950
.setSampler(Sampler.alwaysOn())
9051
.build();
9152

9253
// Create global OpenTelemetry instance using the TracerProvider.
93-
OpenTelemetry otel =
94-
OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();
54+
OpenTelemetry otel = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();
9555

96-
// Create Tracer instance from the global OpenTelemetry object. Tracers are used to create
97-
// Spans. There can be multiple Tracers in a global OpenTelemetry instance.
56+
// Create Tracer instance from the OpenTelemetry object. Tracers are used to create
57+
// Spans. There can be multiple Tracers in an OpenTelemetry instance.
9858
Tracer tracer = otel.getTracer(tracerName);
9959

60+
enableOpenTelemetry(tracer, datasetId);
61+
}
62+
63+
public static void enableOpenTelemetry(Tracer tracer, String datasetId) {
10064
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
10165
// be set to enable tracing.
10266
BigQueryOptions otelOptions =
@@ -107,14 +71,9 @@ public static void enableOpenTelemetry(String tracerName) {
10771
BigQuery bigquery = otelOptions.getService();
10872

10973
// Create dataset.
110-
final String datasetId = "sampleDatasetId";
11174
DatasetInfo info = DatasetInfo.newBuilder(datasetId).build();
11275
Dataset dataset = bigquery.create(info);
11376

114-
if (OTEL_SPAN_IDS.containsKey("com.google.cloud.bigquery.BigQuery.createDataset")) {
115-
System.out.println("createDataset Span was captured!");
116-
}
117-
11877
bigquery.delete(datasetId);
11978
}
12079
}

samples/snippets/src/main/java/com/example/bigquery/EnableOpenTelemetryTracingWithParentSpan.java

Lines changed: 23 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -22,88 +22,50 @@
2222
import com.google.cloud.bigquery.Dataset;
2323
import com.google.cloud.bigquery.DatasetInfo;
2424
import io.opentelemetry.api.OpenTelemetry;
25-
import io.opentelemetry.api.common.AttributeKey;
2625
import io.opentelemetry.api.trace.Span;
2726
import io.opentelemetry.api.trace.Tracer;
2827
import io.opentelemetry.context.Scope;
28+
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
2929
import io.opentelemetry.sdk.OpenTelemetrySdk;
30-
import io.opentelemetry.sdk.common.CompletableResultCode;
3130
import io.opentelemetry.sdk.trace.SdkTracerProvider;
32-
import io.opentelemetry.sdk.trace.data.SpanData;
3331
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
3432
import io.opentelemetry.sdk.trace.samplers.Sampler;
35-
import java.util.Collection;
36-
import java.util.HashMap;
37-
import java.util.Map;
33+
import java.time.LocalDate;
34+
import java.util.logging.ConsoleHandler;
35+
import java.util.logging.Logger;
3836

3937
public class EnableOpenTelemetryTracingWithParentSpan {
40-
// Maps Span names to their attribute maps.
41-
private static final Map<String, Map<AttributeKey<?>, Object>> OTEL_ATTRIBUTES =
42-
new HashMap<String, Map<AttributeKey<?>, Object>>();
43-
// Maps Span names to their parent Span IDs.
44-
private static final Map<String, String> OTEL_PARENT_SPAN_IDS = new HashMap<>();
45-
// Maps Span IDs to their Span names.
46-
private static final Map<String, String> OTEL_SPAN_IDS_TO_NAMES = new HashMap<>();
47-
48-
// Create a SpanExporter to determine how to handle captured Span data.
49-
// See more at https://opentelemetry.io/docs/languages/java/sdk/#spanexporter
50-
private static class SampleSpanExporter
51-
implements io.opentelemetry.sdk.trace.export.SpanExporter {
52-
53-
// TODO(developer): Replace export output before running the sample.
54-
@Override
55-
public CompletableResultCode export(Collection<SpanData> collection) {
56-
// Export data. This data can be sent out of process via netowork calls, though
57-
// for this example local data structures are used.
58-
if (collection.isEmpty()) {
59-
// No span data was collected.
60-
return CompletableResultCode.ofFailure();
61-
}
62-
63-
for (SpanData data : collection) {
64-
OTEL_ATTRIBUTES.put(data.getName(), data.getAttributes().asMap());
65-
OTEL_PARENT_SPAN_IDS.put(data.getName(), data.getParentSpanId());
66-
OTEL_SPAN_IDS_TO_NAMES.put(data.getSpanId(), data.getName());
67-
}
68-
return CompletableResultCode.ofSuccess();
69-
}
70-
71-
// TODO(developer): Replace these functions to suit your needs.
72-
@Override
73-
public CompletableResultCode flush() {
74-
// Export any data that has been queued up but not yet exported.
75-
return CompletableResultCode.ofSuccess();
76-
}
77-
78-
@Override
79-
public CompletableResultCode shutdown() {
80-
// Shut down the exporter and clean up any resources.
81-
return CompletableResultCode.ofSuccess();
82-
}
83-
}
38+
private static final Logger log =
39+
Logger.getLogger(EnableOpenTelemetryTracingWithParentSpan.class.getName());
8440

8541
public static void main(String[] args) {
86-
// TODO(developer): Replace Tracer name
42+
// Set logging to System.err.
43+
ConsoleHandler ch = new ConsoleHandler();
44+
log.addHandler(ch);
45+
46+
// TODO(developer): Replace values before running the sample.
8747
final String tracerName = "Sample Tracer";
88-
enableOpenTelemetryWithParentSpan(tracerName);
89-
}
48+
final String parentSpanName = "Sample Parent Span";
49+
final String datasetId = "sampleDatasetId";
9050

91-
public static void enableOpenTelemetryWithParentSpan(String tracerName) {
92-
// Create TracerProvider using the custom SpanExporter.
51+
// Create TracerProvider that exports to a logger.
9352
SdkTracerProvider tracerProvider =
9453
SdkTracerProvider.builder()
95-
.addSpanProcessor(SimpleSpanProcessor.create(new SampleSpanExporter()))
54+
.addSpanProcessor(SimpleSpanProcessor.builder(LoggingSpanExporter.create()).build())
9655
.setSampler(Sampler.alwaysOn())
9756
.build();
9857

99-
// Create global OpenTelemetry instance using the TracerProvider.
100-
OpenTelemetry otel =
101-
OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();
58+
// Create OpenTelemetry instance using the TracerProvider.
59+
OpenTelemetry otel = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();
10260

10361
// Create Tracer instance from the global OpenTelemetry object. Tracers are used to create
10462
// Spans. There can be multiple Tracers in a global OpenTelemetry instance.
10563
final Tracer tracer = otel.getTracer(tracerName);
64+
enableOpenTelemetryWithParentSpan(tracer, parentSpanName, datasetId);
65+
}
10666

67+
public static void enableOpenTelemetryWithParentSpan(
68+
Tracer tracer, String parentSpanName, String datasetId) {
10769
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
10870
// be set to enable tracing.
10971
BigQueryOptions otelOptions =
@@ -113,19 +75,15 @@ public static void enableOpenTelemetryWithParentSpan(String tracerName) {
11375
.build();
11476
BigQuery bigquery = otelOptions.getService();
11577

116-
// TODO(developer): Replace Span and attribute names.
117-
final String parentSpanName = "Sample Parent Span";
118-
final String attributeKey = "sample-parent-attribute";
119-
final String attributeValue = "sample-parent-value";
120-
final String datasetId = "sampleDatasetId";
78+
LocalDate currentDate = LocalDate.now();
12179

12280
// Create the root parent Span. setNoParent() ensures that it is a parent Span with a Span ID
12381
// of 0.
12482
Span parentSpan =
12583
tracer
12684
.spanBuilder(parentSpanName)
12785
.setNoParent()
128-
.setAttribute(attributeKey, attributeValue)
86+
.setAttribute("current_date", currentDate.toString())
12987
.startSpan();
13088

13189
// The Span Context is automatically passed on to any functions called within the scope of the
@@ -137,26 +95,6 @@ public static void enableOpenTelemetryWithParentSpan(String tracerName) {
13795
} finally {
13896
// finally block ensures that Spans are cleaned up properly.
13997
parentSpan.end();
140-
141-
// Unpack attribute maps to get attribute keys and values.
142-
Map<AttributeKey<?>, Object> parentSpanAttributes = OTEL_ATTRIBUTES.get(parentSpanName);
143-
Object parentSpanAttributeValue =
144-
parentSpanAttributes.get(AttributeKey.stringKey(attributeKey));
145-
if (parentSpanAttributeValue == attributeValue) {
146-
System.out.println("Parent Span was captured!");
147-
} else {
148-
System.out.println("Parent Span was not captured!");
149-
}
150-
151-
String childSpanParentId =
152-
OTEL_PARENT_SPAN_IDS.get("com.google.cloud.bigquery.BigQuery.createDataset");
153-
String parentSpanId = OTEL_SPAN_IDS_TO_NAMES.get(childSpanParentId);
154-
if (OTEL_SPAN_IDS_TO_NAMES.get(childSpanParentId) == parentSpanName) {
155-
System.out.println("createDataset is the child of Sample Parent Span!");
156-
} else {
157-
System.out.println("createDataset is not the child of Parent!");
158-
}
159-
16098
bigquery.delete(datasetId);
16199
}
162100
}

0 commit comments

Comments
 (0)