24

我想检查 Ebean 生成了哪些 SQL 语句,以找出为什么在我的 Play 2.0 应用程序中出现某些异常(与 SQL 语法相关)。有没有办法在 Play Framework 2.0 中记录 Ebean 生成的 SQL 语句?

在 Play 1.x 中,有一个jpa.debugSQL配置选项,如果设置为 true,则会执行此操作。Play 2.0 是否存在类似的 Ebean 设置?关于 Play 2.0 的 Ebean的文档页面仍然有些稀缺。


到目前为止我已经尝试过:

我已经在我的控制器和 Global 对象的onStart/onRequest方法中添加了这些方法调用,但它没有任何效果:

Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL);
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(Play.isDev());

我已经从 修改了日志级别application.conf,但它也没有帮助(即使使用日志级别TRACE)。

4

3 回答 3

53

很抱歉迟到了,但我在开发中使用它:

db.default.logStatements=true

logger.com.jolbox=DEBUG

将这两行添加到 application.conf 中,您就可以开始了。

它输出所有的sql语句。希望能帮助到你。

于 2012-08-14T15:53:46.637 回答
4

您可以使用以下语句启用 SQL 日志记录

Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true);

例如在onRequest拦截器中使用此命令

在下一个版本中,您当然可以在文件ebean.properties中进行配置。

// Tips : use Play.isDev() to log only in dev mode
于 2012-03-15T12:47:16.137 回答
0

您也可以使用 getGeneratedSQL 方法在现场获取 SQL。下面的代码示例

        Query<PreventionActivity> where = find.where(
            and(
                    and(
                    ge("Age_FROM", age)
                    , or(le("Age_TO", age), eq("Age_TO", 0))
                    )
                    , or(eq("Gender_CD", genderCd), eq("Gender_CD", "*"))
            )
    );

    List<PreventionActivity> list = where.findList();
    Logger.info("sql ");
    Logger.info(where.getGeneratedSql());
于 2016-08-31T16:20:45.753 回答