1

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

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

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

  1. jdbcdslog-exp
  2. P6间谍
  3. JdbcProxy
  4. log4jdbc
  5. SqlRecorder

我特别要找的东西:

  1. 几乎没有垃圾的纯 SQL 查询(例如触发查询的时间jdbcdslog-exp 记录数据
  2. 如果我得到一些不需要的数据,我希望能够将其删除以生成纯查询。我试图弄清楚 jdbcdslog 是如何做到的,但很难让它发挥作用。
  3. 我想知道上述任何工具是否可以为我们提供一些关于查询的元数据(比如查询属于哪个包),以便我可以根据包分离出我的日志数据。
4

1 回答 1

1

对于这样的情况,我使用jdbcdslog-exp

jdbcdslog-1.0.6.2.jar添加到类路径。

将类别添加到 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>
于 2013-07-30T07:07:03.563 回答