2009-11-24 100 views
4

我正在研究弹簧可能切换到弹簧栈。我认为很酷的事情之一是Spring jdbc记录所有执行的sql的能力。所以我把log4j放进去,建立一个log4j.properties文件。并没有SQL。Spring JDBC不记录SQL与log4j

这里是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 

这里是通过JDBC春天的输出对于一些非常简单的插入SQL:http://pastie.org/713189

+0

您是否重新启动服务器?是否设定了阈值? – 2009-11-27 22:39:03

+0

嗨菲尔...你做了什么解决这个问题? – 2013-09-18 16:21:06

回答

0

从我的理解春天,当你使用准备将打印出的信息声明。

在Spring的论坛上查看this discussion

0

你是如何执行SQL的? Spring不会奇迹般地记录发送到数据库的SQL,你必须通过适当的渠道。例如,如果您通过使用JdbcTemplate(直接或通过JdbcDaoSupport)执行SQL,那么会记录SQL的某些操作,但仅记录那些涉及直接SQL的操作。

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

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

+0

我正在使用Spring的JdbcTemplate。我实际上使用了一些受版权保护的示例代码(来自Enterprise Spring Recicpes),所以不要以为我应该发布它。尽管我会尝试破解我自己的例子,那是我的下一步。 – 2009-11-24 20:39:08

2

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

几个可能的罪魁祸首为您log4j.properties没有得到正确读取是:

  • log4j.properties是不是在你的类路径中。您可以尝试对它做一个class.getResource()以查看它是否找到它。
  • 类路径中还有另一个log4j.properties
  • 有些东西正在使commons-logging选择使用不同的记录器。你可以找到打开公用日志诊断的说明here
9

尝试设置这些额外的log4j记录器。第一个将吐出经过spring的JdbcTemplate的SQL,第二个将给出Spring在预处理语句上设置的参数值。

<logger name="org.springframework.jdbc.core.JdbcTemplate"> 
    <level value="debug" /> 
</logger> 

<logger name="org.springframework.jdbc.core.StatementCreatorUtils"> 
    <level value="debug" /> 
</logger> 

显然这只会如果你使用JdbcTemplate直接或间接执行的SQL工作。

+0

代码第二行缺少'>' – Isaac 2013-05-08 18:02:24

+0

我正在使用它,但它仍然无法正常工作! – 2013-09-17 19:57:41

+1

第二个不给jdbctemplate中的值PreparedStatementSetter – Emilio 2014-01-15 13:16:25

2

尝试

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应该就足够了。

<!-- activates query logging --> 
<category name="org.springframework.jdbc.core.JdbcTemplate"> 
    <level value="DEBUG"/> 
</category> 
<!-- activates parameter substitution logging --> 
<category name="org.springframework.jdbc.core.StatementCreatorUtils"> 
    <level value="TRACE"/> 
</category> 

..in我们的log4j.xml:

0

假设春3.0.7.RELEASE和log4j的1.2.17,我们得到了任务完成通过。

替换<category/><logger/>工作还行。