【问题标题】:How can I configure sql logging with the Flyway gradle plugin?如何使用 Flyway gradle 插件配置 sql 日志记录?
【发布时间】:2015-11-01 20:29:28
【问题描述】:

我正在使用 Flyway 3.2.1 中的标准 Flyway Gradle 插件

Flyway 似乎没有输出任何 SQL 日志记录,至少在调试级别没有。

我已经配置了 p6spy,现在可以看到 Flyway 发出的 SQL,但只能通过使用“-d”开关启用 Gradle 调试输出。但是当使用“-d”开关调用 Gradle 时,它​​会输出 far 太多噪音。这是我目前的后备位置,但不是很好。

最终,我想要做的就是获取 Flyway 在运行 flywayMigrate 输出到我们的 CI 服务器上的构建日志时发出的 DDL - 但除了“p6spy”之外,我想不出任何方法+ 启用所有调试输出”方法。

我可以使用 p6spy,但我不知道如何为 p6spy 记录器配置 Gradle 日志记录。即使只是为 flyway 迁移任务启用所有 Gradle 调试日志记录也可能没问题 - 是所有的 Gradle 簿记(依赖项和诸如此类)都在弄乱日志。

这就是问题所在:如何减少所有这些调试日志记录,以便只看到 flyway 发出的 DDL。

【问题讨论】:

    标签: logging gradle flyway p6spy


    【解决方案1】:

    假设您将 P6Spy 与 SLF4J 记录器一起使用,P6Spy 生成的日志消息将处于 INFO 级别。这意味着您应该能够在 gradle build 上使用“-i”开关而不是“-d”。这将消除 DEBUG 消息,但仍会有点嘈杂。

    要让大部分构建在 LIFECYCLE 级别(默认)运行,一种选择是在 flyway 任务之前和之后以编程方式更改日志级别。您可能会考虑实现 beforeBaseline 和 afterBaseline flyway 回调来为您更改日志级别。

    参考资料:

    【讨论】:

      【解决方案2】:

      如果您打算应用插件并使用默认任务,我认为您不能设置日志级别。但是,如果您可以创建自己的 flyway 任务,那么您可以实现自己的回调类。

      当您扩展 BaseFlywayCallback 时,您可以覆盖几个挂钩到 flyway 操作的方法,例如migratevalidateinfo

      这是一个如何实现这一点的示例。

      build.gradle

      import org.flywaydb.core.api.callback.BaseFlywayCallback
      import org.flywaydb.core.Flyway
      
      buildscript {
          repositories {
              maven { url 'https://plugins.gradle.org/m2/' }
          }
          dependencies {
              classpath 'gradle.plugin.com.boxfuse.client:flyway-release:4.2.0'
              classpath 'org.mariadb.jdbc:mariadb-java-client:2.1.2'
          }
      }
      
      class CustomFlywayCallback extends BaseFlywayCallback {
      
          def logger
      
          CustomFlywayCallback(def logger) {
              this.logger = logger
          }
      
          @Override
          void beforeEachMigrate(Connection connection, MigrationInfo info) {
              logger.lifecycle("Applying version $info.version")
          }
      }
      
      def getFlyway(def schemaName) {
          def flywayProps = new Properties()
          flywayProps.setProperty('flyway.url', 'jdbc://mariadb://127.0.0.1')
      
          def flyway = new Flyway()
          flyway.configure(flywayProps)
          flyway.setCallbacks(new CustomFlywayCallback(project.logger))
      
          flyway
      }
      
      task migrateSchema() {
          doLast {
              getFlyway('schema_name').migrate()
          }
      }
      

      使用此示例,您现在可以使用lifecycleinfowarn 等覆盖您自己的回调并设置您自己的日志消息。查看您可以覆盖哪些方法的BaseFlywayCallback 类。

      【讨论】:

        猜你喜欢
        • 2017-04-27
        • 1970-01-01
        • 2011-02-24
        • 2012-05-30
        • 2014-04-16
        • 2014-10-25
        • 1970-01-01
        • 1970-01-01
        • 2011-11-02
        相关资源
        最近更新 更多