【问题标题】:Liquibase log level changingLiquibase 日志级别更改
【发布时间】:2020-06-07 10:37:16
【问题描述】:

我使用来自https://www.liquibase.org/blog/3-ways-to-run-liquibase 的代码在数据库上运行更新。它可以工作,但会产生大量日志。我尝试使用

更改 Liquibase 的日志级别
DefaultLoggerConfiguration defaultLoggerConfiguration = new DefaultLoggerConfiguration();
defaultLoggerConfiguration.setLogLevel("off");

但没用。

pom.xml

<properties>
        <mockito.version>3.3.3</mockito.version>
        <junit.version>5.6.2</junit.version>
        <mysql.connector.version>8.0.20</mysql.connector.version>
        <liquibase.version>3.9.0</liquibase.version>
        <snakeyaml.version>1.26</snakeyaml.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.connector.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>${liquibase.version}</version>
        </dependency>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>${snakeyaml.version}</version>
        </dependency>
    </dependencies>

我可以在没有任何额外依赖项的情况下减少日志数量吗?

应用示例https://github.com/Wismut/liquibase_h2_example

【问题讨论】:

  • 存在一些关于如何在 Liquibase 中控制日志级别的问题。您是否尝试过这些解决方案?
  • 感谢您的提问。我没有在网站上找到我的问题的答案

标签: java logging liquibase


【解决方案1】:

错误答案,请参阅下面的更新部分

我认为您正在尝试从 Java 代码配置 Liquibase 日志级别,而不是从 Maven 或类似代码。

您的代码不起作用,因为您正在创建一个 DefaultLoggerConfiguration 对象并设置一个属性,但没有使其可用于 Liquibase。它只是一个随机的 Java 对象,一旦defaultLoggerConfiguration 超出范围就会消失。

看起来正确的做法是让 Liquibase 为您提供对其配置的引用,然后使用该对象设置日志级别。

LiquibaseConfiguration.getInstance()
    .getConfiguration(DefaultLoggerConfiguration.class)
    .setLogLevel("off");

更新

好吧,看来那是完全错误的。 Liquibase 记录器显然是一个红鲱鱼。以前可能有一种配置方法,但现在它只是无条件地委托给 SLF4J,在您在 GitHub 上的示例中,它使用 Logback 作为实际的记录器。

通过添加具有以下内容的文件src/main/resources/logback.xml,我消除了您示例中除信息消息之外的所有内容。

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <logger name="liquibase" level="info"/>
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration> 

有关如何配置 Logback 的更多信息,请参阅http://logback.qos.ch/。将logback.xml 文件放入类路径是一种配置方式,但您也可以使用其他策略。

【讨论】:

  • 感谢您的帮助,但它不处理日志。此外,我写了``` LiquibaseConfiguration.getInstance() .getConfiguration(DefaultLoggerConfiguration.class) .setLogLevel("off"); System.out.println(LiquibaseConfiguration.getInstance() .getConfiguration(DefaultLoggerConfiguration.class) .getLogLevel()); ``` 我在控制台关闭了,还有很多日志
  • 好的。那么,不知何故,日志记录并没有像你想象的那样工作。您是否尝试设置系统属性liquibase.logging
  • 如果你能写出最简单的程序,(a) 初始化 Liquibase,然后 (b) 执行一些 Liquibase 操作,产生不需要的日志消息,我会看看它。
  • github.com/Wismut/liquibase_h2_example 产生超过 2400 条日志行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 2014-09-01
  • 2023-04-11
相关资源
最近更新 更多