2013-08-01 9 views
7

Come posso vedere quando la mia libreria di pooling (C3P0) sta creando e chiudendo le connessioni JDBC?Come registrare l'attività di connessione JDBC?

Nota: ho fatto ricerche su questo e ho già trovato una soluzione. Sto pubblicandolo qui in modo che possa essere utile agli altri e posso rinviarlo in caso lo dimentichi in futuro.

Altri approcci/risposte sono benvenuti.

+1

Questo è davvero disponibile !! – MaVRoSCy

risposta

9

log4jdbc La libreria può essere utilizzata per registrare le connessioni JDBC. Aggiungi questa libreria a POM -

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.6.4</version> 
</dependency> 

<dependency> 
    <groupId>org.lazyluke</groupId> 
    <artifactId>log4jdbc-remix</artifactId> 
    <version>0.2.7</version> 
</dependency> 

Configura log4j.properties. Modifica le opzioni di registrazione per regolare il livello dei dettagli secondo le tue esigenze.

log4j.rootLogger=INFO,R, FILE 
log4j.appender.R=org.apache.log4j.ConsoleAppender 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %5p %t %c - %m%n 

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.ConversionPattern=%d{ISO8601} %5p %t %c - %m%n 
log4j.appender.FILE.File=/home/kshitiz/Documents/tomcat.log 
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd 

# Application logging options 
log4j.logger.org.apache=ERROR 
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=DEBUG 
log4j.logger.MySQL=ERROR 
log4j.logger.org.springframework=DEBUG 
log4j.logger.jdbc.sqlonly=OFF 
log4j.logger.jdbc.sqltiming=ERROR 
log4jdbc.sqltiming.error.threshold=10 
log4j.logger.jdbc.audit=OFF 
log4j.logger.jdbc.resultset=ERROR 
log4j.logger.jdbc.connection=ALL 
log4j.logger.jdbc.resultsettable=OFF 


# Setup vm levels 
log4j.logger.vm.none=FATAL 
log4j.logger.vm.error=ERROR 
log4j.logger.vm.warn=WARN 
log4j.logger.vm.info=INFO 
log4j.logger.vm.debug=DEBUG 

Configurare un'origine dati.

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
      destroy-method="close"> 
     <property name="driverClass" value="net.sf.log4jdbc.DriverSpy" /> 
     <property name="jdbcUrl" value="${db.jdbc.url}" /> 
     <property name="user" value="${db.user}" /> 
     <property name="password" value="${db.password}" /> 
    <!--   these are C3P0 properties --> 
     <property name="acquireIncrement" value="3" /> 
     <property name="minPoolSize" value="10" /> 
     <property name="maxPoolSize" value="30" /> 
     <property name="maxIdleTime" value="600" /> 
</bean> 

Note sulla configurazione sopra origine dati:

  1. tuo conducente abituale nome della classe deve essere sostituito con "net.sf.log4jdbc.DriverSpy"
  2. L'URL JDBC ora deve iniziare con " jdbc: log4jdbc". Pertanto, se si utilizza Oracle, l'URL JDBC inizierà con "jdbc: log4jdbc: oracle".

Ora i messaggi di log apparirebbero sullo schermo -

2013-01-29 15:52:21,549 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.core.JdbcTemplate - Executing SQL query [SELECT id from emp] 
2013-01-29 15:52:21,558 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 
2013-01-29 15:52:31,878 INFO http-bio-8080-exec-3 jdbc.connection - 1. Connection opened org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 
2013-01-29 15:52:31,878 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections: 1 (1) 
2013-01-29 15:52:31,895 INFO http-bio-8080-exec-3 jdbc.connection - 1. Connection closed org.apache.commons.dbcp.DelegatingConnection.close(DelegatingConnection.java:247) 
2013-01-29 15:52:31,895 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections: none 
2013-01-29 15:52:41,950 INFO http-bio-8080-exec-3 jdbc.connection - 2. Connection opened org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 
2013-01-29 15:52:41,950 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections: 2 (1) 
2013-01-29 15:52:52,001 INFO http-bio-8080-exec-3 jdbc.connection - 3. Connection opened org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 
2013-01-29 15:52:52,002 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections: 2 3 (2) 
2013-01-29 15:53:02,058 INFO http-bio-8080-exec-3 jdbc.connection - 4. Connection opened org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 
2013-01-29 15:53:02,058 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections: 2 3 4 (3) 
2013-01-29 15:53:03,403 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.core.BeanPropertyRowMapper - Mapping column 'id' to property 'id' of type int 
2013-01-29 15:53:04,494 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource 

Alcuni comandi Mysql per mostrare dettagli della connessione -

> show variables like '%timeout%'; 
> show status like '%onn%'; 
> show full processlist; 
+0

è possibile registrare le richieste sql con log4jdbc? Perché solo le connessioni vengono registrate qui, non le richieste – OutOfBound

+0

@OutOfBound Sì. È possibile generare una varietà di informazioni configurando il logger appropriato. 'log4j.logger.jdbc.sqlonly = INFO' La documentazione pertinente può essere trovata [qui] (http://code.google.com/p/log4jdbc/) sotto' 5. Configura la sezione dei tuoi logger. –