如何在日志中显示SQL语句?我正在使用EBeans,但由于某些原因它无法插入,但我看不出有什么问题。
我尝试将配置编辑为:
db.default.logStatements=true
并将其添加到logback.xml
<logger name="com.jolbox" level="DEBUG" />
跟随我在网上找到的一些答案,但它似乎不适用于2.4 ...
答案 0 :(得分:29)
记录已随 Play 2.4 而变化。从现在开始,要在控制台中显示SQL语句,只需将以下行添加到conf / logback.xml文件中:
<logger name="org.avaje.ebean.SQL" level="TRACE" />
它应该可以正常工作。
正如@ Flo354在评论中指出的那样, Play 2.6 你应该使用:
<logger name="io.bean" level="TRACE" />
答案 1 :(得分:8)
从Play 2.5开始记录SQL语句非常简单,Play 2.5有一种简单的方法来记录构建在jdbcdslog上的SQL语句,它适用于所有JDBC数据库,连接池实现和持久性框架(Anorm,Ebean, JPA,Slick等)。启用日志记录后,您将看到发送到数据库的每个SQL语句以及有关语句运行时间的性能信息。
Play 2.5中的SQL日志语句功能可以使用logSql属性由数据库配置:
db.default.logSql=true
之后,您可以通过将此行添加到logback.xml
来配置jdbcdslog-exp日志级别:
<logger name="org.jdbcdslog.ConnectionLogger" level="OFF" /> <!-- Won' log connections -->
<logger name="org.jdbcdslog.StatementLogger" level="INFO" /> <!-- Will log all statements -->
<logger name="org.jdbcdslog.ResultSetLogger" level="OFF" /> <!-- Won' log result sets -->
答案 2 :(得分:5)
仅供参考,Ebean的new doc page提供了很好的视频教程,展示了仅为代码的选定区域捕获SQL语句的方法。
由于这个原因,您只能在开发和/或使用记录的语句执行测试showed in video时,在有问题的地方记录语句。
简而言之:通常会将最新的avaje-ebeanorm-mocker依赖项添加到built.sbt
,因此稍后您可以在代码中使用它,如:
LoggedSql.start();
User user = User.find.byId(123);
// ... other queries
List<String> capturedLogs = LoggedSql.stop();
请注意,如果您不需要处理它们,甚至不需要获取List
语句,因为它们通常会显示在控制台中。所以你也可以像这样使用它:
if (Play.isDev()) LoggedSql.start();
User user = User.find.byId(345);
// ... other queries
if (Play.isDev()) LoggedSql.stop();
答案 3 :(得分:0)
我使用jdbcdslog取得了成功。正如@Saeed Zarinfam提到here,Play 2.5默认包括此内容。
与this answer不同,此解决方案显示参数值而不是问号。
以下是我为Play 2.4和MySQL工作所采取的步骤:
添加到build.sbt:
"com.googlecode.usc" % "jdbcdslog" % "1.0.6.2"
添加到logback.xml:
<logger name="org.jdbcdslog.StatementLogger" level="INFO" /> <!-- Will log all statements -->
创建包含以下内容的conf / jdbcdslog.properties文件:
jdbcdslog.driverName=mysql
jdbcdslog.showTime=true
更改db.default.url(示例):
jdbc:mysql://127.0.0.1:3306/mydb
更改为
jdbc:jdbcdslog:mysql://127.0.0.1:3306/mydb;targetDriver=com.mysql.jdbc.Driver
更改db.default.driver:
org.jdbcdslog.DriverLoggingProxy