【问题标题】:Logging options for SlickSlick 的日志记录选项
【发布时间】:2013-01-05 09:09:48
【问题描述】:

我正在创建一个 Play 2.1 应用程序,我决定在其中使用 Slick 进行数据库交互。
但是,我找不到有关如何为 Slick 配置/启用日志记录的文档。
有人知道吗?

【问题讨论】:

    标签: scala logging playframework playframework-2.0 slick


    【解决方案1】:

    Slick 不做任何高于DEBUG 级别的日志记录。在application.conf 中,如果添加以下行:

    logger.scala.slick=DEBUG

    您将被来自查询编译器的信息淹没。

    您可能只对会话信息(连接池管理、查询字符串等)感兴趣。在这种情况下,只需添加

    logger.scala.slick.session=DEBUG

    发送到您的 Play 应用程序的application.conf

    【讨论】:

    • 使用 logger.scala.slick.session=DEBUG 它只显示选择语句,但不显示更新、删除。
    • 这似乎不适用于所有情况,请参阅stackoverflow.com/questions/23087858/turn-slick-logging-off(在我的情况下有效)可能是什么原因?
    • 请注意,在 Slick 3.* 中,记录器名称应为 logger.slicklogger.slick.session
    【解决方案2】:

    对于没有 Slick 的 PlayFramework 2.5.0

    添加到所有数据库配置

    db.default.logSql=true
    

    添加到您的 logback.xml 文件中:

    <logger name="logger.org.jdbcdslog.StatementLogger"  level="INFO" /> 
    

    所有语句都将被记录。

    参考:

    https://www.playframework.com/documentation/2.5.x/ScalaDatabase#How-to-configure-SQL-log-statement

    要玩 Slick 3.0,只需使用

    <logger name="slick.jdbc.JdbcBackend.statement"  level="DEBUG" /> 
    

    【讨论】:

    • 但是play-slick 使用这些路径来配置slick.dbs.default.xxx,那么我应该把它放在哪里呢?
    • 更新了答案,希望对您有所帮助。我相信 Play-Slick 没有与 jdbcdslog 集成,但您可以直接从 Slick 获取查询。
    • 非常感谢!有趣的是(这就是我感到困惑的原因)在“What's New in Play 2.5”中它说Play now has an easy way to log SQL statements, built on jdbcdslog , that works across all JDBC databases, connection pool implementations and persistence frameworks (Anorm, Ebean, JPA, Slick, etc).playframework.com/documentation/2.5.x/…
    • 我可能是错的,但是阅读播放框架代码我看不到 Slick 与 jdbcdslog 集成。确保它不会读取 logSql 的配置。也许应该打开一个问题。
    【解决方案3】:

    要仅打印 select 语句,在 play-2.2.1 和 slick 2.0.0 中,在 application.conf 中有:

    logger.scala.slick.jdbc.JdbcBackend.statement=DEBUG
    

    【讨论】:

      【解决方案4】:

      我目前没有使用 Play,但可以像使用 logback 一样配置它。 This is a nice description 用于设置 Play 日志记录。

      一种选择是添加

      logger.scala.slick=INFO 
      

      到 application.conf,根据 Play 手册。另一个,如果您有自定义 logback.xml,则在其中添加以下行:

         <logger name="scala.slick" level="INFO" />
      

      【讨论】:

        【解决方案5】:

        Slick 似乎使用slf4j 进行日志记录。因此,您可能希望在项目中添加对 slf4j-simple 之类的依赖项,并为 Slick 类设置所需的日志级别。

        【讨论】:

        • 这意味着,对于一个工作示例,将 slf4j-simple-[1.7.5].jar 添加到类路径和 -Dorg.slf4j.simpleLogger.defaultLogLevel=trace 到命令行。
        【解决方案6】:

        我尝试将 logback.xml 与 Slick 记录器集成,但它不起作用。

        修改 logger.xml(根据您的版本从 GitHub 获取最新版本)并添加光滑的记录器,而不是工作。

        <configuration>    
          <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
        
          <appender name="FILE" class="ch.qos.logback.core.FileAppender">
             <file>${application.home}/logs/application.log</file>
             <encoder>
               <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
             </encoder>
           </appender>
        
          <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
              <pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
            </encoder>
          </appender>
        
          <logger name="play" level="INFO" />
          <logger name="application" level="DEBUG" />
        
          <!-- Off these ones as they are annoying, and anyway we manage configuration ourself -->
          <logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
          <logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
          <logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />
          <logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />
          <logger name="scala.slick" level="SQL" />
        
          <root level="ERROR">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
          </root>
        
        </configuration>
        

        【讨论】:

        • 使用 Slick 3.1.0(通过 Play Framework)我发现我需要使用 &lt;logger name="slick" level="SQL" /&gt;
        【解决方案7】:

        对于 slick 3.1.0,将其粘贴到 logback.xml 中的 resources 目录中:

        <?xml version="1.0" encoding="UTF-8"?>
        
        <configuration>
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                </encoder>
            </appender>
        
            <logger name="application" level="DEBUG"/>
            <logger name="com.zaxxer.hikari" level="INFO"/>
            <logger name="slick" level="INFO"/>
        
            <root level="DEBUG">
                <appender-ref ref="STDOUT"/>
            </root>
        </configuration>
        

        【讨论】:

        • 啊,我猜是因为我用的是 logback 而你用的是别的东西。
        【解决方案8】:

        就我而言,我必须将&lt;logger name="slick" level="INFO"/&gt; 添加到我的log4j2.xml 文件中。我将 Slick 3.0.3 与 Spray 1.3.3 和 Log4j 2.1 一起使用

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-19
          • 2014-05-25
          • 1970-01-01
          相关资源
          最近更新 更多