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

后端 未结 2 1946
南方客
南方客 2021-01-14 03:52

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

相关标签:
2条回答
  • 2021-01-14 04:30

    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.

    0 讨论(0)
  • 2021-01-14 04:43

    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

    0 讨论(0)
提交回复
热议问题