如何使用Flyway gradle插件配置sql日志记录?

时间:2015-08-10 02:27:47

标签: logging gradle flyway p6spy

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

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

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

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

我使用p6spy很好,但我无法弄清楚如何为p6spy记录器配置Gradle日志记录。即使仅仅为flyway迁移任务启用所有Gradle调试日志记录也可能是好的 - 这是所有Gradle簿记(依赖关系和诸如此类的东西),这些都记录了日志。

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

2 个答案:

答案 0 :(得分:1)

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

要使大部分构建保持在LIFECYCLE级别(默认值),一个选项是以编程方式更改flyway任务之前和之后的日志级别。您可以查看实现beforeBaseline和afterBaseline flyway回调以更改日志级别。

参考文献:

答案 1 :(得分:1)

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

当你扩展BaseFlywayCallback时,你可以覆盖几个钩入飞路动作的方法,例如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类您可以覆盖哪些方法。