Spring JDBC没有使用log4j记录SQL

我正在研究弹簧可能切换到弹簧组。 我认为很酷的一件事是spring jdbc能够记录所有已执行的sql。 所以我放入log4j,设置一个log4j.properties文件。 而且没有sql。

这是log4j.properties文件:

log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout log4j.appender.stdout.layout.ConversionPattern=%d{ ABSOLUTE} %5p %c{1}:%L - %m%n log4j.rootLogger=debug, stdout log4j.category.org.springframework.jdbc.core=DEBUG 

这里是一些非常简单的插入sql的输出,通过spring jdbc: http : //pastie.org/713189

尝试设置这些额外的log4j记录器。 第一个将吐出通过spring的JdbcTemplate的SQL,第二个将为您提供Spring在预准备语句上设置的参数值。

       

显然,只有在使用JdbcTemplate直接或间接执行SQL时,这才会起作用。

您确定这是您的应用程序正在拾取的log4.properties吗? 我将你发布的log4j.properties复制到我本地机器上的Spring应用程序中,除了JDBC日志记录之外,我还获得了大量的Spring调试条目。 我没有在输出中看到类似的调试条目。

您的log4j.properties无法正确读取的一些可能的罪魁祸首是:

  • log4j.properties不在您的类路径中。 您可以尝试在其上执行class.getResource()以查看它是否正在查找它。
  • 您的类路径上还有另一个log4j.properties
  • 有些事情正在让公共记录选择使用不同的记录器。 您可以在此处找到打开commons-logging诊断的说明

尝试

 log4j.category.org.springframework.jdbc.core = TRACE 

这对我有帮助, DEBUG还不够。 我正在使用org.springframework.jdbc-3.0.6.RELEASE.jar和log4j-1.2.15以及slf4j(1.6.4)

对于一个SQL(即如果你对绑定的参数值不感兴趣), DEBUG就足够了。

根据我的理解,当您使用准备好的声明时,spring将打印出信息。

在Spring的论坛上看到这个讨论 。

你是如何执行SQL的? Spring不会神奇地记录发送到数据库的SQL,你必须通过适当的渠道。

例如,如果您直接或通过JdbcDaoSupport使用JdbcTemplate执行SQL,则是,将记录某些操作的SQL,但仅记录涉及直接SQL的操作。

如果您使用Hibernate或预处理语句,那么Spring永远不会看到SQL本身,因此无法记录它。

如果您发布了一些演示如何执行SQL的示例代码,那将会有很大帮助。

假设Spring 3.0.7.RELEASE和log4j 1.2.17,我们通过以下方式完成了任务:

          

..在我们的log4j.xml中。

替换也可以。