Re: [BUGS]log can not be output when use DataSource - Mailing list pgsql-jdbc
From | Chen Huajun |
---|---|
Subject | Re: [BUGS]log can not be output when use DataSource |
Date | |
Msg-id | 50FBCA78.3040007@cn.fujitsu.com Whole thread Raw |
In response to | Re: [BUGS]log can not be output when use DataSource (dmp <danap@ttc-cmc.net>) |
Responses |
Re: [BUGS]log can not be output when use DataSource
|
List | pgsql-jdbc |
danap I am also a bit confused for what's the expected behavior of PgJDBC driver. I believe the following is expected.Are you agree? 1)logLevel could be set via org.postgresql.Driver.setLogLevel() 2)logLevel also could be set via connection properties(through the DriverManager or DataSource.) 3)if both (1)and (2) are set, (2)override (1) so according to (1),in the following sample ,the loglevel is expected to be DEBUG. =================================================== org.postgresql.Driver.setLogLevel(org.postgresql.Driver.DEBUG); PGPoolingDataSource source = new PGPoolingDataSource(); ...(no DataSource.setLogLevel() called) Connection con = source.getConnection(); =================================================== But the actual loglevel is 0 in existing PgJDBC driver, My patch is for that. After patched the loglevel is DEBUG. > Chen I have rebuilt the driver to include your patch which you can > use to see that the behavior I described as seems to be desired is > not achieved. I don't know what is the behavior above and is not achieved ? Chen Hujaun (2013/01/20 3:52), dmp wrote: > I now have confirmed the issue, but Chen your patch does not I believe address > the underlining behavior that should be expected from the PgJDBC driver and > that is this I believe. > > logLevel may be set via two methods. > > *************************************** > 1. org.postgresql.Driver.setLogLevel() > > 2. User defined logLevel setting via the connection properties > be it through the DriverManager or DataSource. > *************************************** > > I think most would agree and I have confirmed via the existing PgJDBC > behavior that (2), the user setting of the logLevel should override the > method (1), Driver.setLogLevel() at all times. > > The patch Chen does not seem to produce this result and perhaps that is > why it is confusing. It is true as indicated that if the user does not > user DataSource.setLogLevel() then no matter what the Driver.setLogLevel() > is set for INFO, DEBUG, it will always be the default 0 when using the > DataSource connection creation. > > Now I have wasted over an hour in determing the extent of this > reports validity and whether the patch is good. > > I suggest that patches not be accepted unless sample code is supplied > that validates/demostrates the bug and if a patch is submitted it is > tested to address the failure via the sample code. Patches should I > believe as has been addressed before almost always accompanied by > test code to validate that will added to the existing code base. > > Chen I have rebuilt the driver to include your patch which you can > use to see that the behavior I described as seems to be desired is > not achieved. > > http://dandymadeproductions.com/temp/postgresql-loglevel.jdbc4.jar > > danap. > > > Chen Huajun wrote: >> > Yes, it might be better, but I don't see how it fails otherwise ? >> >> Let me describe it again >> 1)Driver has a global LogLevel setting by the following >> org.postgresql.Driver.setLogLevel() >> >> 2)each Connection has their own LogLevel,default is the same as >> Driver's,and can be rewrited by url,for example >> jdbc:postgresql://localhost/test?loglevel=1 >> >> protected AbstractJdbc2Connection(HostSpec[] hostSpecs, String user, >> String database, Properties info, String url) throws SQLException >> { >> ... >> int logLevel = Driver.getLogLevel(); >> String connectionLogLevel = info.getProperty("loglevel"); >> if (connectionLogLevel != null) { >> try { >> logLevel = Integer.parseInt(connectionLogLevel); >> } catch (Exception l_e) { >> // XXX revisit >> // invalid value for loglevel; ignore it >> } >> } >> ... >> } >> >> 3)BaseDataSource.getConnection() will append loglevel to url regardless >> BaseDataSource.setLogLevel() was not be called >> So,the url should be as the following,and the Connection's log is off. >> jdbc:postgresql://localhost/test?loglevel=0 > > >
pgsql-jdbc by date: