Ben*_*ema 44
有,但它有点模糊.引用使用SLF4J和Log4J修复liquibase日志记录:
有一种简单的方法,通过降低依赖:
<!-- 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>
Run Code Online (Sandbox Code Playgroud)
现在前两个是你的日常日志框架(slf4j api和log4j实现).这些是您的标准log4j依赖项的补充,因为他们所做的只是路由到物理日志框架.没有log4j/logback/etc. 本身,他们仍然无法路由任何东西.
然而,最后一个是有趣的,因为它在liquibase将扫描Logger
实现的特定包中提供单个类.它是Matt Bertolini的开源软件,所以你可以在GitHub上找到它.
如果你想自己这样做,还有艰难的方法:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
此实现有效,但应仅用作示例.例如,我没有使用Liquibase的名称来要求记录,而是使用此类Logger
本身.Matt的版本也做了一些null -checks,所以这可能是一个更成熟的实现,加上它的开源.
我对您的要求不是很确定,但据我了解,您想使用SLF4J API记录所有liquibase日志。如果我是对的,那么我想你可以做到。
首先将以下依赖项添加到pom.xml文件中:
<dependency>
<groupId>com.mattbertolini</groupId>
<artifactId>liquibase-slf4j</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.7</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并在您的logback.xml文件中,添加logger for liquibase并根据需要设置LEVEL。
<logger name="liquibase" level="DEBUG" />
Run Code Online (Sandbox Code Playgroud)