Re: [BUGS]log can not be output when use DataSource

From: dmp <danap(at)ttc-cmc(dot)net>
To: Chen Huajun <chenhj(at)cn(dot)fujitsu(dot)com>, pgsql-jdbc(at)postgresql(dot)org
Subject: Re: [BUGS]log can not be output when use DataSource
Date: 2013-01-19 19:52:42
Message-ID: 50FAF98A.1030008@ttc-cmc.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Chen Huajun 2013-01-20 10:44:08 Re: [BUGS]log can not be output when use DataSource
Previous Message Dave Cramer 2013-01-19 11:51:06 Re: [BUGS]log can not be output when use DataSource