Skip to content

Commit fbdc3ae

Browse files
authored
Fix logging for restrictive environments with logging off (#1117)
## Description - Fixes issue #1113 ## Testing <!-- Describe how the changes have been tested--> ## Additional Notes to the Reviewer <!-- Share any additional context or insights that may help the reviewer understand the changes better. This could include challenges faced, limitations, or compromises made during the development process. Also, mention any areas of the code that you would like the reviewer to focus on specifically. -->
1 parent bfefa91 commit fbdc3ae

3 files changed

Lines changed: 15 additions & 1 deletion

File tree

NEXT_CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
### Fixed
1313

1414
- Fix driver crash when using `INTERVAL` types.
15+
- Fix connection failure in restricted environments when `LogLevel.OFF` is used.
1516
- Fix U2M by including SDK OAuth HTML callback resources.
1617

1718
---

src/main/java/com/databricks/jdbc/common/util/LoggingUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public class LoggingUtil {
1717

1818
public static void setupLogger(String logDir, int logFileSizeMB, int logFileCount, LogLevel level)
1919
throws IOException {
20+
if (level == LogLevel.OFF) {
21+
// Skip handler initialization to avoid AccessDeniedException in restricted environments
22+
return;
23+
}
2024
if (LOGGER instanceof JulLogger && System.getProperty(JAVA_UTIL_LOGGING_CONFIG_FILE) == null) {
2125
// Only configure JUL logger if it's not already configured via external properties file
2226
JulLogger.initLogger(toJulLevel(level), logDir, logFileSizeMB * 1024 * 1024, logFileCount);

src/test/java/com/databricks/jdbc/common/util/LoggingUtilTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ void testSetupLogger() {
1818
assertDoesNotThrow(() -> LoggingUtil.setupLogger("test.log", 1, 1, LogLevel.DEBUG));
1919
}
2020

21+
@Test
22+
void testSetupLoggerWithOffLevel() {
23+
// When log level is OFF, setupLogger should return early without initializing handlers
24+
// This should not throw an exception even if the log path is not writable
25+
assertDoesNotThrow(() -> LoggingUtil.setupLogger("/", 1, 1, LogLevel.OFF));
26+
assertDoesNotThrow(() -> LoggingUtil.setupLogger("/invalid/path", 1, 1, LogLevel.OFF));
27+
}
28+
2129
@ParameterizedTest
2230
@MethodSource("logLevelToJulLevelProvider")
2331
void testToJulLevel(LogLevel input, Level expected) {
@@ -32,6 +40,7 @@ static Stream<Arguments> logLevelToJulLevelProvider() {
3240
org.junit.jupiter.params.provider.Arguments.of(LogLevel.FATAL, Level.SEVERE),
3341
org.junit.jupiter.params.provider.Arguments.of(LogLevel.INFO, Level.INFO),
3442
org.junit.jupiter.params.provider.Arguments.of(LogLevel.TRACE, Level.FINEST),
35-
org.junit.jupiter.params.provider.Arguments.of(LogLevel.WARN, Level.WARNING));
43+
org.junit.jupiter.params.provider.Arguments.of(LogLevel.WARN, Level.WARNING),
44+
org.junit.jupiter.params.provider.Arguments.of(LogLevel.OFF, Level.OFF));
3645
}
3746
}

0 commit comments

Comments
 (0)