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中。
用
替换
也可以。
- Selenium sendKeys()针对Chrome,Firefox和Safari的不同行为
- java.io.IOException:标记/重置不支持Java音频输入流/缓冲输入流
- JavaFX如何从SceneBuilder设置ImageView
- java.lang.ClassNotFoundException:JPA找不到javax.persistence.Persistence
- libGDX坐标系
- 嵌套类的构造函数的问题
- Jersey JAX-RS + Spring安全应用程序示例
- 使用javareflection在scala中获取具有特定注释的方法参数
- 在Tomcat上运行Play Framework 2.0?