16

如何在日志中显示 SQL 语句?我正在使用 EBeans,但由于某些原因无法插入,但我看不出有什么问题。

我试图将我的配置编辑为:

db.default.logStatements=true

并将其添加到 logback.xml

<logger name="com.jolbox" level="DEBUG" />

遵循我在网上找到的一些答案,但它似乎不适用于 2.4...</p>

4

4 回答 4

30

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" />
于 2015-06-28T12:57:49.757 回答
10

从 Play 2.5 开始,记录 SQL 语句非常简单,Play 2.5 有一种简单的方法来记录 SQL 语句,它建立在jdbcdslog 之上,适用于所有 JDBC 数据库、连接池实现和持久性框架(Anorm、Ebean、JPA、Slick 等)。启用日志记录后,您将看到发送到数据库的每条 SQL 语句以及有关语句运行时间的性能信息。

Play 2.5 中的 SQL 日志语句功能可以通过数据库配置,使用 logSql 属性:

db.default.logSql=true

之后,您可以通过添加以下行来配置 jdbcdslog-exp 日志级别logback.xml

  <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 -->
于 2016-07-18T07:02:41.210 回答
5

仅供参考,在 Ebean 的新文档页面上有很好的视频教程,展示了仅为代码的选定区域捕获 SQL 语句的方法。

多亏了这一点,您可以在开发和/或使用记录的语句执行测试时仅在有问题的地方记录语句,如视频所示

简而言之:像往常一样向您添加最新的 avaje-ebeanorm-mocker依赖项built.sbt,以便稍后您可以在代码中使用它,例如:

LoggedSql.start();
User user = User.find.byId(123);
// ... other queries
List<String> capturedLogs = LoggedSql.stop();

List请注意,如果您不需要处理它们,您甚至不需要获取of 语句,因为它们通常显示在控制台中。所以你也可以像这样使用它:

if (Play.isDev()) LoggedSql.start();
User user = User.find.byId(345);
// ... other queries
if (Play.isDev()) LoggedSql.stop();
于 2015-10-22T11:51:55.940 回答
0

我使用jdbcdslog取得了成功。正如@Saeed Zarinfam这里提到的,Play 2.5 默认包含这个。

此答案不同,此解决方案显示参数值而不是问号。

以下是我为使其适用于 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
于 2017-11-09T17:14:28.803 回答