How to enable trace/debugging output with Anorm on Play 2.4.0

半腔热情 提交于 2019-12-01 08:22:14

You can intercept calls going thru JDBC driver using

log4jdbc

I have used successfully with JPA/hibernate and Hikary on Play 2.4, the setup should be identically since this influences the JDBC layer.

Add the library to your build.sbt:

"org.bgee.log4jdbc-log4j2" % "log4jdbc-log4j2-jdbc4" % "1.12"

Adjust the config. Add log4jdbc, the log4jdbc automatically detects the underlying driver from the string: mysql. If you are using an obscure JDBC driver, you can configure it using config options - see docs below.

db.default.url="jdbc:log4jdbc:mysql://localhost/......"
db.default.driver=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

Example of my logback.xml, relevant part:

<logger name="log4jdbc.log4j2" level="ERROR">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</logger>
<logger name="jdbc.sqlonly" level="INFO" >
    <appender-ref ref="DBFILE" />
</logger>

<appender name="DBFILE" class="ch.qos.logback.core.FileAppender">
    <file>${application.home}/logs/sql.log</file>
    <encoder>
        <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
    </encoder>
</appender>

And, finally the log4jdbc.log4j2.properties (create it in the conf directory which is on the class path):

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

More docs: https://code.google.com/p/log4jdbc-log4j2/

Let me know if this works for you

Anorm doesn't log anything (and doesn't use logback), but 'output' is plain JDBC, so you can configure debug on your connection pool.

EDIT:

The debug utility from my framework Acolyte can be used to print/log the JDBC statement that would have been executed with the connection.

If you have SQL"SELECT * FROM Test WHERE id = $id", you can debug it as following.

<!-- language: scala -->

import acolyte.jdbc.AcolyteDSL

AcolyteDSL.debuging() { implicit dcon =>
  SQL"SELECT * FROM Test WHERE id = $id"
  // just print the prepared statement
  // with parameters bound
}

// really execute,
// the check the real ResultSet
SQL"SELECT * FROM Test WHERE id = $id"

Acolyte is available on Maven Central.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!