如何在控制台中抑制 Flyway 迁移输出?

How to suppress Flyway migration output in console?

我们正在开发一个简单的 Java 控制台应用程序作为学校项目。一开始,我决定使用 Flyway 进行数据库迁移,因为它看起来是最简单的解决方案。我对迁移本身很满意,但想禁止 Flyway 的控制台日志记录。

在谷歌上广泛搜索之后,我无法弄清楚如何在不改变标准输出的情况下摆脱日志记录。我应该这样做还是有更好的方法来清理我们的输出?对我来说,这听起来像是一个问题,应该在某个地方有一个我找不到的简单开关...

谢谢!

编辑:这是有问题的项目:ohtu-ts(UI 是芬兰语,但代码是英文)

Flyway 旨在在类路径上寻找兼容的日志记录库。如果找到 none,它会回退到默认的日志记录行为,这就是您在此处看到的。

这没有很好地记录,因为 Flyway 通常从客户端使用,如 CLI、Maven 等。客户端有自己的日志处理机制。但是,您采用的是非常手动的方法。

现在让它工作

使用SLF4J:

  • 下载 SLF4J jar 文件from Maven Repository
  • 下载 SLF4J 的 NOP 绑定 from Maven Repository
  • 将这两个 jar 放在您机器上的文件夹中(例如 C:\jars
  • 在执行应用程序时将这些 jar 添加到类路径中
    • 例如:java -cp C:\jars\* -jar ohtu-ts-all.jar

Flyway 将选择 SLF4J 并将其用于日志记录。 NOP 绑定是 SLF4J 的特殊实现,它抑制所有日志。

更好的解决方案

Looking at your code, you're pulling in Flyway Core as a dependency. Use the Gradle plugin instead。这样你就可以避免这种疯狂的手动设置。

使用 log4j 将日志存储在文件中

类 导入

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Maven 依赖项

        <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.30</version>
    </dependency>

log4j 属性文件在

src/main/resources/log4j.properties

文件log4j.properties

log4j.rootLogger=DEBUG, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/file_name_to_logs.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.MaxFileSize=5MB