记录与数据库通信的SQL

时间:2013-07-30 06:04:21

标签: java spring logging jdbc

我正在为我的Web应用程序开发SQL Logger。我希望能够记录用户与GUI交互触发的SQL查询。我在Spring环境中工作,使用maven和mybatis。我将我的webapp打包成战争并将其部署到tomcat上。

我希望能够直接使用SQL来访问数据库。我可以尝试使用像Log4j中的SocketAppender / HTMLAppender,并发布查询,以便其他非SQL人员可以直接使用它而无需编辑它,或者从查询中删除垃圾以查看填充的数据。

我遇到了几个可以记录SQL的Logger工具。

  1. jdbcdslog-EXP
  2. P6SPY
  3. JdbcProxy
  4. log4jdbc
  5. SqlRecorder
  6. 我特别想要的是:

    1. 纯SQL查询没有几乎没有垃圾(例如查询被解雇的时间jdbcdslog-exp recorded data
    2. 如果我收到一些不需要的数据,我希望能够删除它以生成纯粹的查询。我试图弄清楚jdbcdslog是如何做到的,但是很难让它成功。
    3. 我想知道上述任何工具是否可以为我们提供有关查询的一些元数据(例如查询所属的包),以便我可以根据包将我的日志数据分开。

1 个答案:

答案 0 :(得分:1)

我使用 jdbcdslog-exp 来处理这类情况。

jdbcdslog-1.0.6.2.jar 添加到classpath。

为log4j配置添加类别(如果需要,也为ResultSetLogger设置INFO - 小心OutOfMemory)

<category name="org.jdbcdslog.StatementLogger">
  <priority value="INFO"/>
</category>  
<category name="org.jdbcdslog.ResultSetLogger">
  <priority value="FATAL"/>
</category>

如果需要按运行时切换语句记录,可以使用

启动log4j
PropertyConfigurator.configureAndWatch("log4j.xml", 60000);

更改你的jdbc连接参数(这里是jboss中hsql的例子)

<connection-url>jdbc:hsqldb:hsql://localhost:1801</connection-url>
<driver-class>org.hsqldb.jdbcDriver</driver-class>

<connection-url>jdbc:jdbcdslog:hsqldb:hsql://localhost:1801;targetDriver=org.hsqldb.jdbcDriver</connection-url>
<driver-class>org.jdbcdslog.DriverLoggingProxy</driver-class>