本文介绍了记录与数据库通信的SQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am working on a SQL Logger for my web application. I want to be able to Log the SQL query that is fired by user-interaction with the GUI. I'm working in a Spring environment, working with maven and mybatis. I package my webapp into a war and deploy it onto tomcat.

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

I want to be able to use the SQL directly to access the database. I can try and use a SocketAppender/HTMLAppender like in Log4j, and post the queries so that other non-SQL people can use it directly without editing it, or removing garbage from the queries to see the populated data.

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

I came across several Logger tools that can log SQL.


  1. jdbcdslog-exp

  2. P6Spy

  3. JdbcProxy

  4. log4jdbc

  5. SqlRecorder

  1. jdbcdslog-exp
  2. P6Spy
  3. JdbcProxy
  4. log4jdbc
  5. SqlRecorder

我特意寻找:


  1. 纯粹的SQL查询几乎没有很少或没有垃圾(例如查询被解雇的时间)

  2. 如果我收到一些不需要的数据,我希望能够将其删除以生成纯查询。我正在试图弄清楚jdbcdslog是如何做到这一点的,但是很难让它工作。

  3. 我想知道上述任何工具是否可以为我们提供一些元数据查询(就像查询所属的包那样),这样我就可以根据包来分离我的日志数据。


推荐答案

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

i use jdbcdslog-exp for cases like this.

添加 jdbcdslog-1.0.6.2 .jar 到classpath。

add jdbcdslog-1.0.6.2.jar to classpath.

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

add categories to log4j configuration (set INFO for ResultSetLogger too if you want - beware of OutOfMemory)

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

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

if you need to switch statement logging by runtime you can start your log4j with

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

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

change your jdbc connection parameters (here example for hsql in jboss)

来自

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

这篇关于记录与数据库通信的SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-13 22:01