gpt4 book ai didi

java - 如何让 liquibase 使用 slf4j 进行日志记录?

转载 作者:IT老高 更新时间:2023-10-28 21:11:55 25 4
gpt4 key购买 nike

很多people不确定howfix将 liquibase 记录到控制台或文件中。

是否可以将 liquibase 记录到 slf4j 中?

最佳答案

有,但有点模糊。报价 Fixing liquibase logging with SLF4J and Log4J :

简单的方法,通过加入一个依赖:

<!-- your own standard logging dependencies -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId><!-- or log4j2 or logback or whatever-->
<version>1.7.5</version>
</dependency>

<!-- special dependency to fix liquibase's logging fetish -->
<dependency>
<groupId>com.mattbertolini</groupId>
<artifactId>liquibase-slf4j</artifactId>
<version>1.2.1</version>
</dependency>

现在前两个是您的日常日志框架(slf4j api 和 log4j 实现)。这些是您标准 log4j 依赖项的补充,因为它们所做的只是路由到物理日志记录框架。没有 log4j/logback/等。本身,他们仍然无法路由任何东西。

然而,最后一个是一个有趣的,因为它在一个特定的包中提供了一个类,liquibase 将扫描 Logger 实现。它是开源的,作者是 Matt Bertolini,所以你可以 find it on GitHub .

如果你想自己做,还有The Hard Way :

package liquibase.ext.logging; // this is *very* important

import liquibase.changelog.ChangeSet;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.logging.core.AbstractLogger;

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

/**
* Liquibase finds this class by itself by doing a custom component scan (sl4fj wasn't generic enough).
*/
public class LiquibaseLogger extends AbstractLogger {
private static final Logger LOGGER = LoggerFactory.getLogger(LiquibaseLogger.class);
private String name = "";

@Override
public void setName(String name) {
this.name = name;
}

@Override
public void severe(String message) {
LOGGER.error("{} {}", name, message);
}

@Override
public void severe(String message, Throwable e) {
LOGGER.error("{} {}", name, message, e);
}

@Override
public void warning(String message) {
LOGGER.warn("{} {}", name, message);
}

@Override
public void warning(String message, Throwable e) {
LOGGER.warn("{} {}", name, message, e);
}

@Override
public void info(String message) {
LOGGER.info("{} {}", name, message);
}

@Override
public void info(String message, Throwable e) {
LOGGER.info("{} {}", name, message, e);
}

@Override
public void debug(String message) {
LOGGER.debug("{} {}", name, message);
}

@Override
public void debug(String message, Throwable e) {
LOGGER.debug("{} {}", message, e);
}

@Override
public void setLogLevel(String logLevel, String logFile) {
}

@Override
public void setChangeLog(DatabaseChangeLog databaseChangeLog) {
}

@Override
public void setChangeSet(ChangeSet changeSet) {
}

@Override
public int getPriority() {
return Integer.MAX_VALUE;
}
}

此实现有效,但应仅用作示例。例如,我没有使用 Liquibase 的名称来要求记录,而是使用这个 Logger 类本身。 Matt 的版本也做了一些 null 检查,所以这可能是一个更成熟的实现,而且它是开源的。

关于java - 如何让 liquibase 使用 slf4j 进行日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20880783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com