Как войти в 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?