Re: [BUGS]log can not be output when use DataSource
От | dmp |
---|---|
Тема | Re: [BUGS]log can not be output when use DataSource |
Дата | |
Msg-id | 50FAF98A.1030008@ttc-cmc.net обсуждение исходный текст |
Ответ на | Re: [BUGS]log can not be output when use DataSource (Chen Huajun <chenhj@cn.fujitsu.com>) |
Ответы |
Re: [BUGS]log can not be output when use DataSource
|
Список | pgsql-jdbc |
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 по дате отправления: