4

在 Play 2.4.0 中,Anorm 被移到了外部包中,并且日志记录被更改为 LogBack ( http://logback.qos.ch )

一切都很好,但是对于跟踪 SQL 调用来说,类/包名称在任何地方都不明显。

“显而易见”(基于导入语句)

<logger name="anorm" level="TRACE" />

什么也没做,我也试过

<logger name="anorm.SQL" level="TRACE" />

以防万一它需要更具体。

谷歌搜索只是非常需要,所以我很茫然。

任何人?

4

2 回答 2

4

您可以使用拦截通过 JDBC 驱动程序的调用

log4jdbc

我已经在 Play 2.4 上成功使用了 JPA/hibernate 和 Hikary,设置应该相同,因为这会影响 JDBC 层。

将库添加到您的 build.sbt:

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

调整配置。添加log4jdbc,log4jdbc会自动从字符串中检测底层驱动:mysql。如果您使用的是不起眼的 JDBC 驱动程序,则可以使用配置选项对其进行配置 - 请参阅下面的文档。

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

我的 logback.xml 示例,相关部分:

<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>

最后是 log4jdbc.log4j2.properties(在类路径上的 conf 目录中创建它):

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

更多文档:https ://code.google.com/p/log4jdbc-log4j2/

让我知道这是否适合您

于 2015-12-09T09:34:34.097 回答
1

Anorm 不记录任何内容(也不使用 logback),但“输出”是纯 JDBC,因此您可以在连接池上配置调试。

编辑:

我的框架 Acolyte 中的调试实用程序可用于打印/记录将通过连接执行的 JDBC 语句。

如果你有SQL"SELECT * FROM Test WHERE id = $id",你可以调试它如下。

<!-- 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 在Maven Central上可用。

于 2015-06-04T21:17:48.107 回答