答案 1
有,但它有点晦涩难懂。引用使用SLF4J和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/etc.本身,他们仍然无法路由任何东西。
然而,最后一个是一个有趣的,因为它在特定的包中提供了一个类,liquibase将扫描该类以查找实现。它是Matt Bertolini的开源,所以你可以在GitHub上找到它。Logger
如果你想自己做这件事,还有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的名称来要求日志记录,而是使用这个类本身。Matt的版本也做了一些空值检查,所以这可能是一个更成熟的实现,加上它是开源的。Logger
答案 2
我不是很确定您的要求,但我的理解是,您希望使用SLF4J API记录所有液化物流日志。如果我是对的,那么我想你可以做到。
首先将以下依赖项添加到您的 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>
并进入您的日志.xml文件,为液化物添加记录器并根据您的要求设置级别。
<logger name="liquibase" level="DEBUG" />
推荐
-
如何使用Java中的RESTful Web服务获取远程/客户端IP地址? 我已经在我的项目中编写了Rest Web服务。Web服务调用可能来自不同 machine.so 我需要通过REST Web服务找出IP地址。 从这个请求.getRemoteAddr()使用这个。 但是我不能使用getRemoteAddr()。因为我的请
-
从包含大量文件的zip文件中提取1文件的最快方法是什么? 我尝试了但它们也缺少一些东西。 LZMA SDK不提供一种如何使用的文档/教程,这非常令人沮丧。没有 javadoc。 虽然7z jbinding没有提供一种简单的方法来只提取1个文件,但是,它只提供了提取zip文件
-
输入/输出流在销毁时是否关闭? Java 中的 InputStreams 和 OutputStreams 是否在销毁时关闭()?我完全理解这可能是不好的形式(特别是在C和C++世界中),但我很好奇。 另外,假设我有以下代码: 无名的FileInputStream是否在p.load
-
Java 程序中的字符串大小是否有任何限制? 我有一个字符串定义为 字符串 xx 我可以分配的字符数是否有任何限制? 2) 我正在将用户输入分配给此字符串 xx。70%的人只说一个字。有时他们给出一个大句子,所以想知道可
-
标签
推荐