java - 如何记录 JDBC 连接 Activity ?

标签 java logging jdbc c3p0 log4jdbc

如何查看池库 (C3P0) 何时创建和关闭 JDBC 连接?

注意:我已经对此进行了研究并且已经找到了解决方案。我将它张贴在这里,以便它可能对其他人有用,并且我可以引用它以防我将来忘记它。

欢迎使用其他方法/答案。

最佳答案

log4jdbc 库可用于记录 JDBC 连接。将这个库添加到 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>

配置log4j.properties。修改日志记录选项以根据您自己的需要调整详细信息级别。

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

配置数据源。

<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>

上述数据源配置注意事项:

  1. 您常用的驱动程序类名称应替换为 net.sf.log4jdbc.DriverSpy
  2. 您的 JDBC URL 现在必须以 jdbc:log4jdbc 开头。因此,如果您使用 Oracle,您的 JDBC URL 现在将以 jdbc:log4jdbc:oracle 开头。

现在日志消息会出现在屏幕上 -

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

一些显示连接细节的 Mysql 命令 -

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

关于java - 如何记录 JDBC 连接 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988231/

相关文章:

logging - 如何使用 logback 创建 2 个不同的 ROOT 记录器?

javascript - console.log 是否未定义?

java - JDBC 未选择数据库

javascript - 如何在 MySQL 数据库中实现这种自动增量

java - 线程中的异常 "main"org.hibernate.MappingException : invalid configuration

java - 如何使用与 PHP mail() 相同的机制在 Java 中发送邮件

java - 使用 TOMCAT-Jersey Rest 获取 404 错误

java - 最好的 Java OpenID 库

logging - 如何获取所有 Karaf 日志?

apache-spark - spark 2.2 struct Streaming foreach writer jdbc sink 滞后