diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcBulkInsertWriter.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcBulkInsertWriter.java index 857600214626..8bf9c75a6a49 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcBulkInsertWriter.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcBulkInsertWriter.java @@ -38,7 +38,8 @@ import javax.annotation.concurrent.GuardedBy; class BigQueryJdbcBulkInsertWriter { - private final BigQueryJdbcCustomLogger LOG = new BigQueryJdbcCustomLogger(this.toString()); + private static final BigQueryJdbcCustomLogger LOG = + new BigQueryJdbcCustomLogger(BigQueryJdbcBulkInsertWriter.class.getName()); private JsonStreamWriter jsonStreamWriter; private final Phaser openRequestCount = new Phaser(1); private final Object streamLock = new Object(); diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java index 74f0fdc5a10d..b003aaae7eab 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java @@ -38,7 +38,8 @@ import java.util.Locale; class BigQueryParameterHandler { - private final BigQueryJdbcCustomLogger LOG = new BigQueryJdbcCustomLogger(this.toString()); + private static final BigQueryJdbcCustomLogger LOG = + new BigQueryJdbcCustomLogger(BigQueryParameterHandler.class.getName()); private final int parametersArraySize; private final boolean enableTimestampPicos; final ArrayList parametersList; diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java index bfbf17c52607..189c589b404d 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java @@ -75,7 +75,8 @@ import java.util.Queue; class BigQueryPreparedStatement extends BigQueryStatement implements PreparedStatement { - private final BigQueryJdbcCustomLogger LOG = new BigQueryJdbcCustomLogger(this.toString()); + private static final BigQueryJdbcCustomLogger LOG = + new BigQueryJdbcCustomLogger(BigQueryPreparedStatement.class.getName()); private static final char POSITIONAL_PARAMETER_CHAR = '?'; // parameterHandler is inherited from BigQueryStatement protected final int parameterCount; diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java index 0918f897bad4..ab86cfdc9d17 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java @@ -28,8 +28,8 @@ /** This class returns ResultSetMetadata for the JSON and the Arrow ResultSets */ class BigQueryResultSetMetadata implements ResultSetMetaData { - private final BigQueryJdbcResultSetLogger LOG = - BigQueryJdbcResultSetLogger.getLogger(this.getClass()); + private static final BigQueryJdbcResultSetLogger LOG = + BigQueryJdbcResultSetLogger.getLogger(BigQueryResultSetMetadata.class); private final FieldList schemaFieldList; private final BigQueryStatement statement; private final int columnCount; diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcCustomLoggerTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcCustomLoggerTest.java index d07052c07235..c4a6d576f91c 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcCustomLoggerTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcCustomLoggerTest.java @@ -635,6 +635,56 @@ public void testCreatingStatementsDoesNotRegisterChildLoggers() throws Exception + " statements must not register additional child loggers on the driver root logger"); } + @Test + public void testCreatingPreparedAndCallableStatementsDoesNotRegisterChildLoggers() + throws Exception { + BigQueryConnection connection = mock(BigQueryConnection.class); + doReturn("leak-test-connection").when(connection).getConnectionId(); + doReturn(BigQueryConnection.SessionState.empty()).when(connection).getSessionStateSnapshot(); + + Logger rootLogger = BigQueryJdbcRootLogger.getRootLogger(); + // Warm up so that any one-time, class-level logger is registered before we measure. + new BigQueryPreparedStatement(connection, "SELECT 1"); + new BigQueryCallableStatement(connection, "CALL my_proc()"); + int childrenBefore = childLoggerCount(rootLogger); + + for (int i = 0; i < OBJECT_COUNT; i++) { + new BigQueryPreparedStatement(connection, "SELECT 1"); + new BigQueryCallableStatement(connection, "CALL my_proc()"); + } + + assertEquals( + childrenBefore, + childLoggerCount(rootLogger), + "Creating " + + OBJECT_COUNT + + " PreparedStatements and CallableStatements must not register additional child" + + " loggers on the driver root logger"); + } + + @Test + public void testCreatingParameterHandlersAndBulkInsertWritersDoesNotRegisterChildLoggers() + throws ReflectiveOperationException { + Logger rootLogger = BigQueryJdbcRootLogger.getRootLogger(); + // Warm up so that any one-time, class-level logger is registered before we measure. + new BigQueryParameterHandler(1); + new BigQueryJdbcBulkInsertWriter(); + int childrenBefore = childLoggerCount(rootLogger); + + for (int i = 0; i < OBJECT_COUNT; i++) { + new BigQueryParameterHandler(1); + new BigQueryJdbcBulkInsertWriter(); + } + + assertEquals( + childrenBefore, + childLoggerCount(rootLogger), + "Creating " + + OBJECT_COUNT + + " ParameterHandlers and BulkInsertWriters must not register additional child loggers" + + " on the driver root logger"); + } + @Test public void testCreatingDatabaseMetaDataDoesNotRegisterChildLoggers() throws ReflectiveOperationException {