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 50FA1403.7020301@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
Re: [BUGS]log can not be output when use DataSource
List pgsql-jdbc
> 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)
throwsSQLException 
     {
...
                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


--
Best Regards,
Chen Huajun
(2013/01/18 1:22), dmp wrote:
> Also is logLevel expected in the DriverManager.getConnection(getUrl(), user, password)?
>
> According to the API jdbc:subprotocol:subname is expected and
> many of the other parameters seem to not be optionally applied like loginTimeout, and socketTimeout like logLevel.
>
> I'm also not inclinded to understand how this is a bug and fails
> to not log, though may not report the parameter properly unless
> the user does setLogLevel().
>
> danap.
>
>
> Dave Cramer wrote:
>  > Yes, it might be better, but I don't see how it fails otherwise ?
>  >
>  > Dave Cramer
>  >
>  > dave.cramer(at)credativ(dot)ca
>  > http://www.credativ.ca
>  >
>  >
>  > On Thu, Jan 17, 2013 at 5:42 AM, Chen Huajun <chenhj@cn.fujitsu.com
>  > <mailto:chenhj@cn.fujitsu.com>> wrote:
>  >
>  >
>  > > It's early here but I can't see how this makes it work. It
>  > appears that the code that is being replaced is exactly the same
>  > except that there is an if statement in front of it ?
>  > >
>  >
>  > >
>  > org.postgresql.Driver.__setLogLevel(org.postgresql.__Driver.DEBUG);
>  >
>  > here the JVM level's LogLevel is set to be DEBUG.
>  >
>  >
>  >
>  > > DataSource source = (DataSource)new
>  > InitialContext().lookup("__DataSource");
>  > > Connection con = source.getConnection();
>  >
>  > source.getConnection()
>  > -->DriverManager.__getConnection(getUrl(), user, password)
>  > ->getUrl()
>  > sb.append("&loglevel=").__append(logLevel);
>  >
>  > here the Connection's LogLevel is set to be the initial value 0(*)
>  > via URL,
>  > although nobody set DataSource's LogLevel by calling
>  > BaseDataSource.setLogLevel().
>  >
>  > I think it's better append "loglevel" to URL only when
>  > BaseDataSource.setLogLevel() was called.
>  > so a Connection created by DataSource.getConnection() can inherit
>  > JVM level's LogLevel setting
>  > just like which one created by DriverManager.getConnection().
>  >
>  >
>  > *)0 is the initial value and not a valid LogLevel,
>  > valid values are INFO (1) and DEBUG (2).
>  >
>  >
>  > --
>  > Best Regards,
>  > Chen Huajun
>  > (2013/01/17 17:19), Dave Cramer wrote:
>  >
>  > It's early here but I can't see how this makes it work. It
>  > appears that the code that is being replaced is exactly the same
>  > except that there is an if statement in front of it ?
>  >
>  >
>  >
>  > Dave Cramer
>  >
>  > dave.cramer(at)credativ(dot)ca
>  > http://www.credativ.ca
>  >
>  >
>  > On Wed, Jan 16, 2013 at 11:47 PM, Chen Huajun
>  > <chenhj@cn.fujitsu.com <mailto:chenhj@cn.fujitsu.com>
>  > <mailto:chenhj@cn.fujitsu.com <mailto:chenhj@cn.fujitsu.com>>__>
>  > wrote:
>  >
>  > Hi,
>  >
>  > In the following code,log can not be output as expected.
>  >
>  > ------------------------------__-------
>  >
>  > org.postgresql.Driver.__setLogLevel(org.postgresql.__Driver.DEBUG);
>  > DataSource source = (DataSource)new
>  > InitialContext().lookup("__DataSource");
>  > Connection con = source.getConnection();
>  > ------------------------------__-------
>  >
>  > It's seems to be a problem,
>  > I have made a small patch to fix it.
>  > Hopefully this useful.
>  >
>  > --
>  > Best Regards,
>  > Chen Huajun
>  > --
>  > Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org
>  > <mailto:pgsql-jdbc@postgresql.org>
>  > <mailto:pgsql-jdbc@postgresql.__org
>  > <mailto:pgsql-jdbc@postgresql.org>>)
>  >
>  > To make changes to your subscription:
>  > http://www.postgresql.org/__mailpref/pgsql-jdbc
>  > <http://www.postgresql.org/mailpref/pgsql-jdbc>
>
>






pgsql-jdbc by date:

Previous
From: Dave Cramer
Date:
Subject: Re: Driver.java.in & Copyright Info
Next
From: Dave Cramer
Date:
Subject: Re: [BUGS]log can not be output when use DataSource