我正在使用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。
答案 0 :(得分:1)
假设您正在将P6Spy与SLF4J记录器一起使用,P6Spy生成的日志消息将处于INFO级别。这意味着您应该能够使用" -i"打开gradle构建而不是" -d"。这将消除DEBUG消息,但它仍然会有点嘈杂。
要使大部分构建保持在LIFECYCLE级别(默认值),一个选项是以编程方式更改flyway任务之前和之后的日志级别。您可以查看实现beforeBaseline和afterBaseline flyway回调以更改日志级别。
参考文献:
答案 1 :(得分:1)
如果您计划应用插件并使用默认任务,我认为您不能设置日志级别。但是,如果你可以创建自己的flyway任务,那么你可以实现自己的回调类。
当你扩展BaseFlywayCallback时,你可以覆盖几个钩入飞路动作的方法,例如migrate
,validate
,info
等
以下是一个如何实现此目的的示例。
<强>的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()
}
}
使用此示例,您现在可以覆盖自己的回调并使用lifecycle
,info
,warn
等设置自己的日志消息。查看BaseFlywayCallback类您可以覆盖哪些方法。