Как войти в SQL с log4jdbc?

В проекте Playframework 2.0 я хотел бы проанализировать выданные SQL-запросы Slick. Я использую 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, которое, кажется, является источником проблемы.

РЕДАКТИРОВАТЬ: При поиске немного глубже, точная ошибка "Не найден подходящий драйвер".

3 ответа

Вы пытались использовать logger.com.jolbox.bonecp=DEBUG и / или logger.scala.slick=DEBUG вместо? Это обычно более чем достаточно для регистрации, просто не получается запустить запись транзакций.

Ох, и вам нужно установить db.default.logStatements=true для регистрации Bonecp на работу.

Видимо, плагин Play DB не мешает использовать этот тип URL. Если вы посмотрите в DB.scala в модуле play-jdbc Line 345, он просто передаст 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)

Вы пробовали установку db.default.logStatements=true в вашем application.conf? Может быть, это просто поддерживается Anorm?

Другие вопросы по тегам