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 {