2013-07-16 5 views
2

2.0 Playframework 프로젝트에서 발행 된 SQL 쿼리를 Slick으로 분석하고 싶습니다. 나는 그것을 위해 log4jdbc를 사용하고 있지만 작동시키지 못한다.log4jdbc로 SQL을 로그하는 방법은 무엇입니까?

나는 lib/ 폴더에 log4jdbc.jar 파일을 추가하고 다음에 나의 application.conf 파일을 변경 한 : 그것은 Cannot connect to database [default] 오류가 발생한다

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" 

. log4jdbc가 없으면 모든 것이 잘 동작합니다. 내가 놓친 게 있니?

Ps : 중요한주의 사항으로, 나는 또한 문제의 기원 인 것으로 보이는 장난스런 확장을 사용하고 있습니다.

편집 : 조금 더 자세히 검색하면 정확한 오류는 "적합한 드라이버를 찾을 수 없음"입니다.

+0

분명히 Play DB Plugin이 이러한 종류의 URL을 사용하는 것을 막지는 않습니다. 모듈 play-jdbc Line 345에서 DB.scala를 보면 JDBC에 URL 만 전달됩니다. – mandubian

답변

1

분명히 Play DB Plugin이 이러한 종류의 URL을 사용하는 것을 막지는 않습니다. 모듈 play-jdbc Line 345에서 DB.scala를 보면 JDBC에 URL 만 전달됩니다.

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)

+0

당신은 올바른 길을 가고있었습니다. 장난스럽고 문제가있는 것 같습니다. 나는 조금 더 파다. –

0

당신이 당신의 application.conf에 db.default.logStatements=true을 설정 해봤 될 수 있는가? 아마도 Anorm이 지원 한 것일까 요?

+0

Typesafe의 다른 라이브러리 인'anorm'이 아니라 'slick'을 사용합니다. –

1

대신 logger.com.jolbox.bonecp=DEBUG 및/또는 logger.scala.slick=DEBUG을 사용해 보셨습니까? 이는 일반적으로 충분한 로깅보다 더 많으며, 일부 트랜잭션 로깅을 수행하지 못하는 것 같습니다.

아, 그리고 bonecp 로깅을 사용하려면 db.default.logStatements=true을 설정해야합니다.

+0

사실 그것은 내가 사용하기로 결정한 대체품입니다. –

관련 문제