2

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

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

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

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

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

所以这就是问题所在:我怎样才能减少所有这些调试日志记录,以便我可以看到 flyway 正在发布的 DDL。

4

2 回答 2

1

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

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

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

构建.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-11-07T16:04:36.153 回答
1

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

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

参考:

于 2015-08-11T17:20:51.073 回答