如何让DBI记录所有查询,包括params?

时间:2013-10-31 10:07:19

标签: perl dbi

我正在试图找出遗留应用程序对我们的mysql数据库(复数)做了什么,因为我需要完全重构/替换它的一部分而不关心它是如何做到的。我只对结果感兴趣。

目前,我正在使用DBI::ProfileDBI::ProfileDumper添加$ENV{DBI_PROFILE} = "!Statement/DBI::ProfileDumper";。这在命令行上运行dbiprof dbi.prof时显示了一堆查询,但看起来有点奇怪。

我可能会错误地阅读报告。

#####[ 3 ]###########################################################
  Count         : 4
  Total Time    : 0.018930 seconds
  Longest Time  : 0.018881 seconds
  Shortest Time : 0.000005 seconds
  Average Time  : 0.004732 seconds
  Key 1         :

INSERT INTO orders (foo, bar) VALUES (1, 2)

为什么4显示为Count?它在orders表中创建两行,而不是4.此外,它显示了它正在执行的第一个插入的值。对于其他一些人,它会将?保留在查询字符串中。

也许分析是错误的方法。我一直在考虑使用猴子修补DBI来记录查询,但我不知道该去哪里。我可以向prepareexecute添加日志记录功能,以获取查询字符串以及参数。

我可以使用类似的东西吗?当然有人想这样做吗?或者也许是另一种方法?

我愿意接受任何建议。

3 个答案:

答案 0 :(得分:3)

您想在第2级使用跟踪: https://metacpan.org/pod/DBI#TRACING

答案 1 :(得分:2)

DBI::Log是一个非常简单的解决方案。我最喜欢的事情是您可以在命令行上调用它,例如:

perl -MDBI::Log script.pl

..,它将直接输出到STDERR,而无需对代码进行任何修改。

答案 2 :(得分:1)

您将获得更有意义的跟踪,使用DBIx :: Log4perl或稍微更现代的DBIx :: LogAny也更灵活。