diff --git a/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDriver.java b/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDriver.java index 11199c372b..a41fdd6ee1 100644 --- a/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDriver.java +++ b/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDriver.java @@ -144,7 +144,9 @@ public Connection connect(String url, Properties info) throws SQLException { logPath = BigQueryJdbcUrlUtility.DEFAULT_LOG_PATH; } - BigQueryJdbcRootLogger.setLevel(logLevel, logPath); + BigQueryJdbcRootLogger.setLevel(logLevel); + BigQueryJdbcRootLogger.enableFileLogger(logPath); + // Logging starts from here. BigQueryConnection connection = new BigQueryConnection(connectionUri); diff --git a/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcRootLogger.java b/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcRootLogger.java index ef963d87d3..9438464e2f 100644 --- a/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcRootLogger.java +++ b/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcRootLogger.java @@ -34,16 +34,17 @@ import java.util.logging.Logger; /** This class is used to log messages from the BigQuery JDBC Driver. */ -class BigQueryJdbcRootLogger { +public class BigQueryJdbcRootLogger { /** * Note: Each connection will have its own file handler with the level and logPath specified in * the connection properties. But the logs will be driver logs and not connection specific. */ - private static final Logger logger = Logger.getLogger("com.google.cloud.bigquery"); + private static final Logger logger = Logger.getLogger("com.google.cloud.bigquery.jdbc"); private static final Logger storageLogger = Logger.getLogger("com.google.cloud.bigquery.storage"); + private static Level forcedLevel = Level.OFF; private static Handler fileHandler = null; private static Path currentLogPath = null; private static int fileCounter = 0; @@ -106,53 +107,27 @@ public static Logger getRootLogger() { return logger; } - private static void setHandler() throws IOException { - // If Console handler exists, remove it. - // If File handler exists, use it. Else create new one. - for (Handler h : logger.getHandlers()) { - if (h instanceof ConsoleHandler) { - h.close(); - logger.removeHandler(h); - break; - } - if (h instanceof FileHandler) { - fileHandler = h; - break; - } - } - - if (fileHandler == null) { - String fileName = String.format("BigQueryJdbc%d", fileCounter); - fileCounter++; - - currentLogPath = Files.createTempFile(fileName, ".log"); - currentLogPath.toFile().deleteOnExit(); - - fileHandler = new FileHandler(currentLogPath.toString(), 0, 1, true); - logger.addHandler(fileHandler); - } + public static void enableConsoleLogger() { + ConsoleHandler consoleHandler = new ConsoleHandler(); + consoleHandler.setFormatter(getFormatter()); + logger.addHandler(consoleHandler); } - public static void setLevel(Level level, String logPath) throws IOException { - if (level != Level.OFF) { - setPath(logPath); - if (logger.getHandlers().length == 0) { - setHandler(); - fileHandler.setFormatter(getFormatter()); - logger.setUseParentHandlers(false); - } - fileHandler.setLevel(level); + public static void setLevel(Level level) throws IOException { + if (forcedLevel == Level.OFF) { logger.setLevel(level); - } else { - for (Handler h : logger.getHandlers()) { - h.close(); - logger.removeHandler(h); - } - fileHandler = null; - currentLogPath = null; } } + public static void forceSetLevel(Level level) { + forcedLevel = level; + logger.setLevel(level); + } + + public static void enableFileLogger(String logPath) { + setPath(logPath); + } + static void setPath(String logPath) { try { if (!logPath.isEmpty() && !logPath.endsWith("/")) { diff --git a/google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java b/google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java index 5aa41b2975..5178130347 100644 --- a/google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java +++ b/google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java @@ -17,5 +17,15 @@ package com.google.cloud.bigquery.jdbc.it; import com.google.cloud.bigquery.jdbc.BigQueryJdbcBaseTest; +import com.google.cloud.bigquery.jdbc.BigQueryJdbcRootLogger; +import java.util.logging.Level; +import org.junit.BeforeClass; -public class ITBase extends BigQueryJdbcBaseTest {} +public class ITBase extends BigQueryJdbcBaseTest { + + @BeforeClass + public static void setupLogger() throws Exception { + BigQueryJdbcRootLogger.forceSetLevel(Level.SEVERE); + BigQueryJdbcRootLogger.enableConsoleLogger(); + } +}