With Play 2.4.0 Anorm got moved to an external package and logging got changed to LogBack (http://logback.qos.ch)
All well and good but nowhere are the class/package names obvious for tracing SQL calls.
The "obvious" (based on the import statements)
<logger name="anorm" level="TRACE" />
did nothing and I also tried
<logger name="anorm.SQL" level="TRACE" />
just in case it needed to be more specific.
Google searches just dead needed so I'm at a loss.
Anyone?
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.
来源:https://stackoverflow.com/questions/30647074/how-to-enable-trace-debugging-output-with-anorm-on-play-2-4-0