2

在 2.0 Playframework 项目中,我想分析Slick发出的 SQL 查询。我为此使用 log4jdbc,但我无法让它工作。

我已将文件添加到log4jdbc.jar文件lib/夹中并将我的 application.conf 文件更改为以下内容:

db.default.driver=net.sf.log4jdbc.DriverSpy
db.default.url="jdbc:log4jdbc:mysql://127.0.0.1:3306/mydatabase"
db.default.user="username"
db.default.pass="password"

这会导致Cannot connect to database [default]错误。没有 log4jdbc,一切正常。我错过了什么吗?

Ps:一个重要的通知,我也在使用 play-slick 扩展,这似乎是问题的根源。

编辑:通过更深入的搜索,确切的错误是“找不到合适的驱动程序”。

4

3 回答 3

1

您是否尝试过使用logger.com.jolbox.bonecp=DEBUG和/或logger.scala.slick=DEBUG代替?这通常是绰绰有余的日志记录,只是似乎无法进行一些事务日志记录。

哦,你需要设置db.default.logStatements=truebonecp 日志记录才能工作。

于 2013-07-21T17:58:10.147 回答
1

显然 Play DB Plugin 并没有阻止使用这种 url。如果您查看模块 play-jdbc 第 345 行中的 DB.scala,它只是将 url 传递给 JDBC。

conf.getString("url") match {
  case Some(PostgresFullUrl(username, password, host, dbname)) =>
    datasource.setJdbcUrl("jdbc:postgresql://%s/%s".format(host, dbname))
    datasource.setUsername(username)
    datasource.setPassword(password)
  case Some(url @ MysqlFullUrl(username, password, host, dbname)) =>
    val defaultProperties = """?useUnicode=yes&characterEncoding=UTF-8&connectionCollation=utf8_general_ci"""
    val addDefaultPropertiesIfNeeded = MysqlCustomProperties.findFirstMatchIn(url).map(_ => "").getOrElse(defaultProperties)
    datasource.setJdbcUrl("jdbc:mysql://%s/%s".format(host, dbname + addDefaultPropertiesIfNeeded))
    datasource.setUsername(username)
    datasource.setPassword(password)
  case Some(url @ H2DefaultUrl()) if !url.contains("DB_CLOSE_DELAY") =>
    if (Play.maybeApplication.exists(_.mode == Mode.Dev)) {
      datasource.setJdbcUrl(url + ";DB_CLOSE_DELAY=-1")
    } else {
      datasource.setJdbcUrl(url)
    }
  case Some(s: String) =>
    datasource.setJdbcUrl(s)
  case _ =>
    throw conf.globalError("Missing url configuration for database [%s]".format(conf))
}

所以 pb 可能在数据源本身(BoneCP)

于 2013-07-16T11:55:32.137 回答
0

您是否尝试过db.default.logStatements=true在 application.conf 中设置?也许它只是受到 Anorm 的支持?

于 2013-07-16T11:58:20.283 回答