【问题标题】:Where to see the logged sql statements in play2?在 play2 中哪里可以看到记录的 sql 语句?
【发布时间】:2016-04-11 20:01:27
【问题描述】:

我发现application.conf中有这样的配置:

# If enabled, log SQL statements being executed.
db.default.logStatements=true

我已启用它,但我找不到任何记录已执行 sql 的日志文件。

我在哪里可以找到它,或者我错过了什么?

【问题讨论】:

  • Play 和 Scala 对版本非常非常 - 在所有问题中添加版本号将有助于 play/scala 世界的新手在遇到特定于版本的建议时绊倒(永远)为他们工作。

标签: sql logging playframework-2.0 anorm


【解决方案1】:

1。应用程序.conf

确保:

db.default.logStatements=true

这个配置其实是bonecp的设置,也就是play2中使用的连接池

2。自定义记录器

将自定义记录器配置添加到conf/logger.xml

内容可能是:

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%-5level - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.jolbox.bonecp" level="DEBUG">
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="play" level="DEBUG">
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="application" level="DEBUG">
        <appender-ref ref="STDOUT" />
    </logger>

</configuration>

com.jlbox.bonecp 用于 bonecpplayapplication 用于 play2。

3。在 application.conf 中禁用记录器设置

评论application.conf中的记录器设置:

# Logger
# ~~~~~
# You can also configure logback (http://logback.qos.ch/), by providing a logger.xml file in the conf directory .

# Root logger:
# logger.root=ERROR

# Logger used by the framework:
# logger.play=INFO

# Logger provided to your application:
# logger.application=DEBUG

重启播放,你会看到所有执行的SQL(包括参数值)。

【讨论】:

  • 在 play 2.3.4 中完美运行
  • 这似乎不适用于 2.4.2。他们将异常从核心区域中拉出来,所以我猜还有其他事情发生。
  • db.default.logSql=true 似乎正在播放 2.5.3
【解决方案2】:

据我所知,这在 Play 2.4.2 中不再有效。默认连接池引擎已更改为 HikariCP。

将此添加到您的 application.conf 并按照以下说明进行操作。事情应该会奏效:

Application.conf

db.default.pool = "bonecp"
db.default.bonecp.logStatements=true

conf/logger.xml 将自定义记录器配置添加到 conf/logger.xml。

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%-5level - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.jolbox.bonecp" level="DEBUG">
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="play" level="DEBUG">
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="application" level="DEBUG">
        <appender-ref ref="STDOUT" />
    </logger>

</configuration>

【讨论】:

  • 这会将池更改回 BoneCP。有没有办法使用 HikariCP 进行日志记录? (我使用的是 Play 2.4.3)
  • @PatrikBeck:我用 HikariCP 的包&lt;logger name="com.zaxxer" level="DEBUG"/&gt; 尝试了类似的方法,我确实收到了c.z.h.p.HikariPool 调试消息,但没有收到实际的 SQL 语句。也许 HikariCP 只是不支持这一点。 :-/ 另见related Play 2.4 question
  • 现在,我只是这样做:在调试一些 Anorm/SQL 问题时使用 BoneCP(具有上述设置),并在完成后切换回默认值。
  • 我能够使用 log4jdbc 在保留 Hikary 的同时启用日志记录。它包装 JDBC 驱动程序并记录 SQL 语句。
  • @PatrikBeck:究竟如何,您能对此发表答案吗?您是否需要修改 stackoverflow.com/a/30654324/56285 中的存储库代码?
【解决方案3】:

只需将以下内容添加到 application.conf(在 play 2.2.1 中对我有用)

db.default.logStatements=true

logger.com.jolbox.bonecp=DEBUG

【讨论】:

  • 这似乎不适用于带有 scala 的 play 2.3,而 @Freewind 给出的解决方案可以。
【解决方案4】:

对于 HikariCP(即从 Play 2.4 开始),请参阅https://github.com/brettwooldridge/HikariCP/wiki/JDBC-Logging

HikariCP 目前并不固有地包含 JDBC 日志记录。这是一个有意识的决定,而不是疏忽或未开发的未来路线图项目。几乎所有主要数据库都有一个能够自行登录的 JDBC 驱动程序。对于那些不这样做的人,log4jdbc-log4j2 是一个不错的选择。

此 Wiki 页面记录了如何为常用数据库以及 log4jdbc-log4j2 启用日志记录。

对于log4jdbc-log4j2:将"org.bgee.log4jdbc-log4j2" % "log4jdbc-log4j2-jdbc4.1" % "1.16"添加到libraryDependencies;配置描述在https://code.google.com/archive/p/log4jdbc-log4j2/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多