diff --git a/pgjdbc/src/main/java/org/postgresql/Driver.java b/pgjdbc/src/main/java/org/postgresql/Driver.java index 5a1014362b..8b950a44a6 100644 --- a/pgjdbc/src/main/java/org/postgresql/Driver.java +++ b/pgjdbc/src/main/java/org/postgresql/Driver.java @@ -36,6 +36,7 @@ import java.util.Properties; import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.logging.ConsoleHandler; import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.Logger; @@ -343,7 +344,7 @@ private void setupLoggerFromProperties(final Properties props) { } else if ( DriverManager.getLogStream() != null) { handler = new StreamHandler(DriverManager.getLogStream(), formatter); } else { - handler = new StreamHandler(System.err, formatter); + handler = new ConsoleHandler(); } } else { handler.setFormatter(formatter); diff --git a/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DriverTest.java b/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DriverTest.java index 56e68c4cdc..fe63435e65 100644 --- a/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DriverTest.java +++ b/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DriverTest.java @@ -21,6 +21,8 @@ import org.junit.Test; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; import java.io.PrintWriter; import java.lang.reflect.Method; import java.sql.Connection; @@ -275,6 +277,40 @@ public void testSetLogStream() throws Exception { } } + @Test + public void testSystemErrIsNotClosedWhenCreatedMultipleConnections() throws Exception { + TestUtil.initDriver(); + PrintStream err = System.err; + String loggerLevel = System.getProperty("loggerLevel"); + String loggerFile = System.getProperty("loggerFile"); + + System.clearProperty("loggerLevel"); + System.clearProperty("loggerFile"); + System.setProperty("loggerLevel", "INFO"); + PrintStream buffer = new PrintStream(new ByteArrayOutputStream()); + System.setErr(buffer); + try { + Connection con = DriverManager.getConnection(TestUtil.getURL(), TestUtil.getUser(), TestUtil.getPassword()); + try { + assertNotNull(con); + } finally { + con.close(); + } + con = DriverManager.getConnection(TestUtil.getURL(), TestUtil.getUser(), TestUtil.getPassword()); + try { + assertNotNull(con); + System.err.println(); + assertFalse("The System.err should not be closed.", System.err.checkError()); + } finally { + con.close(); + } + } finally { + System.setProperty("loggerLevel", loggerLevel); + System.setProperty("loggerFile", loggerFile); + System.setErr(err); + } + } + private void setProperty(String key, String value) { if (value == null) { System.clearProperty(key);