diff --git a/java-bigquery-jdbc/pom.xml b/java-bigquery-jdbc/pom.xml
index 152924230b26..ca886227ac68 100644
--- a/java-bigquery-jdbc/pom.xml
+++ b/java-bigquery-jdbc/pom.xml
@@ -83,6 +83,10 @@
org.apache.httpcomponents.*:*
io.grpc:*
+
+ io.opentelemetry.contrib:opentelemetry-gcp-auth-extension
+ io.opentelemetry:opentelemetry-exporter-otlp
+
@@ -424,6 +428,16 @@
opentelemetry-sdk-testing
test
+
+ io.opentelemetry
+ opentelemetry-sdk-logs
+ test
+
+
+ io.opentelemetry
+ opentelemetry-sdk-trace
+ test
+
com.google.cloud
google-cloud-trace
diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcOpenTelemetry.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcOpenTelemetry.java
index 1995a4d330e4..92f9240fa3ef 100644
--- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcOpenTelemetry.java
+++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcOpenTelemetry.java
@@ -40,6 +40,7 @@
import java.util.Objects;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Handler;
import java.util.logging.Logger;
@@ -119,6 +120,7 @@ static class TelemetryConfig {
private static final ConcurrentHashMap connectionConfigs =
new ConcurrentHashMap<>();
+ private static final ReentrantLock lock = new ReentrantLock();
private BigQueryJdbcOpenTelemetry() {}
@@ -141,16 +143,21 @@ private BigQueryJdbcOpenTelemetry() {}
}
public static void ensureGlobalHandlerAttached() {
- Logger logger = Logger.getLogger(BIGQUERY_NAMESPACE);
- boolean present = false;
- for (Handler h : logger.getHandlers()) {
- if (h instanceof OpenTelemetryJulHandler) {
- present = true;
- break;
+ lock.lock();
+ try {
+ Logger logger = Logger.getLogger(BIGQUERY_NAMESPACE);
+ boolean present = false;
+ for (Handler h : logger.getHandlers()) {
+ if (h instanceof OpenTelemetryJulHandler) {
+ present = true;
+ break;
+ }
}
- }
- if (!present) {
- logger.addHandler(new OpenTelemetryJulHandler());
+ if (!present) {
+ logger.addHandler(new OpenTelemetryJulHandler());
+ }
+ } finally {
+ lock.unlock();
}
}
diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcLoggingBaseTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcLoggingBaseTest.java
index 2196363663fb..450b07a65ba8 100644
--- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcLoggingBaseTest.java
+++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcLoggingBaseTest.java
@@ -30,10 +30,12 @@ public abstract class BigQueryJdbcLoggingBaseTest extends BigQueryJdbcBaseTest {
private Handler handler;
private Logger logger;
private long threadId;
+ private java.util.logging.Level originalLevel;
@BeforeEach
public void setUpLogValidator() {
logger = BigQueryJdbcRootLogger.getRootLogger();
+ originalLevel = logger.getLevel();
logger.setLevel(java.util.logging.Level.ALL);
capturedLogs.clear();
threadId = Thread.currentThread().getId();
@@ -59,6 +61,7 @@ public void close() throws SecurityException {}
public void tearDownLogValidator() {
if (logger != null && handler != null) {
logger.removeHandler(handler);
+ logger.setLevel(originalLevel);
}
}
diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/OpenTelemetryJulHandlerTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/OpenTelemetryJulHandlerTest.java
index 7f5f841511dd..e923dd011778 100644
--- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/OpenTelemetryJulHandlerTest.java
+++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/OpenTelemetryJulHandlerTest.java
@@ -44,9 +44,11 @@ public class OpenTelemetryJulHandlerTest {
static final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create();
private static final Logger logger = Logger.getLogger("com.google.cloud.bigquery");
+ private java.util.logging.Level originalLevel;
@BeforeEach
public void setUp() {
+ originalLevel = logger.getLevel();
logger.setLevel(java.util.logging.Level.ALL);
BigQueryJdbcOpenTelemetry.ensureGlobalHandlerAttached();
}
@@ -56,6 +58,7 @@ public void tearDown() {
BigQueryJdbcOpenTelemetry.unregisterConnection("test-uuid");
BigQueryJdbcOpenTelemetry.unregisterConnection("wrong-uuid");
BigQueryJdbcOpenTelemetry.unregisterConnection("gcp-uuid");
+ logger.setLevel(originalLevel);
}
@Test
diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/PerConnectionFileHandlerTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/PerConnectionFileHandlerTest.java
index fda5112703fd..a1149733b113 100644
--- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/PerConnectionFileHandlerTest.java
+++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/PerConnectionFileHandlerTest.java
@@ -45,12 +45,15 @@ public class PerConnectionFileHandlerTest {
private PerConnectionFileHandler handler;
private BigQueryConnection mockConnection;
+ private Level originalLevel;
@BeforeEach
public void setUp() {
handler = new PerConnectionFileHandler(tempDir.toString(), Level.INFO);
mockConnection = Mockito.mock(BigQueryConnection.class);
BigQueryJdbcMdc.clear();
+ originalLevel = BigQueryJdbcRootLogger.getRootLogger().getLevel();
+ BigQueryJdbcRootLogger.getRootLogger().setLevel(Level.ALL);
}
@AfterEach
@@ -59,6 +62,7 @@ public void tearDown() {
handler.close();
}
BigQueryJdbcMdc.clear();
+ BigQueryJdbcRootLogger.getRootLogger().setLevel(originalLevel);
}
private Optional findLogFile(String suffix) throws IOException {