使用Squeryl和Play 2记录Oracle SQL语句

时间:2014-01-30 18:22:27

标签: oracle jdbc playframework-2.0 slf4j squeryl

我正在尝试在Play 2应用程序中记录Squeryl生成的SQL,以进行调试。我正在使用this以及以下Oracle日志记录属性:

.level=SEVERE
oracle.jdbc.level=FINE
oracle.jdbc.handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
oracle.net.ns.level=FINEST
oracle.net.ns.handlers=java.util.logging.ConsoleHandler

之前在使用相同Oracle驱动程序jar的非Play应用程序中,这对我有用,但在Play应用程序中,JUL-to-SLF4J桥接器似乎导致了问题:

Oops, cannot start the server.
Configuration error: Configuration error[Cannot connect to database [default]]
    at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:92)
    at play.api.Configuration.reportError(Configuration.scala:570)
    at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:252)
    at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:243)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at play.api.db.BoneCPPlugin.onStart(DB.scala:243)
    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:88)
    at play.api.Play$$anonfun$start$1.apply(Play.scala:88)
    at play.api.Play$$anonfun$start$1.apply(Play.scala:88)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18)
    at play.api.Play$.start(Play.scala:87)
    at play.core.StaticApplication.<init>(ApplicationProvider.scala:52)
    at play.core.server.NettyServer$.createServer(NettyServer.scala:243)
    at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:279)
    at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:274)
    at scala.Option.map(Option.scala:145)
    at play.core.server.NettyServer$.main(NettyServer.scala:274)
    at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: java.lang.IllegalArgumentException: can't parse argument number 18=false
    at java.text.MessageFormat.makeFormat(MessageFormat.java:1339)
    at java.text.MessageFormat.applyPattern(MessageFormat.java:458)
    at java.text.MessageFormat.<init>(MessageFormat.java:350)
    at java.text.MessageFormat.format(MessageFormat.java:811)
    at org.slf4j.bridge.SLF4JBridgeHandler.getMessageI18N(SLF4JBridgeHandler.java:268)
    at org.slf4j.bridge.SLF4JBridgeHandler.callLocationAwareLogger(SLF4JBridgeHandler.java:223)
    at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:301)
    at java.util.logging.Logger.log(Logger.java:481)
    at java.util.logging.Logger.doLog(Logger.java:503)
    at java.util.logging.Logger.log(Logger.java:547)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:919)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:267)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1625)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:365)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:557)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:233)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
    at com.jolbox.bonecp.BoneCP.obtainRawInternalConnection(BoneCP.java:351)
    at com.jolbox.bonecp.BoneCP.<init>(BoneCP.java:416)
    at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:120)
    at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:245)
    ... 22 more

我尝试从我已部署的应用程序中删除JUL到SLF4J桥接jar,但如果该jar不存在,则Play拒绝启动,因此无效。

我显然不需要使用这种特殊的方法,我只想要一些方法来记录正在执行的SQL选择(最好没有对Oracle服务器的管理员访问权限)。

1 个答案:

答案 0 :(得分:0)

我只需要将oracle.net.ns.level更改为SEVERE。只有在您想要记录发送到服务器和从服务器发送的网络数据包时,才需要记录oracle.net