从类路径中删除slf4j-log4j12-1.5.8.jar
或之一slf4j-log4j12-1.6.0.jar
。您的项目不应依赖于不同版本的 SLF4J。我建议你只使用 1.6.0。
如果您使用的是 Maven,则可以排除传递依赖项。这是一个例子:
<dependency>
<groupId>com.sun.xml.stream</groupId>
<artifactId>sjsxp</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
</exclusions>
</dependency>
使用当前的 slf4j-api 实现是不可能删除这些警告的。该类org.slf4j.LoggerFactory
打印消息:
...
if (implementationSet.size() > 1) {
Util.report("Class path contains multiple SLF4J bindings.");
Iterator iterator = implementationSet.iterator();
while(iterator.hasNext()) {
URL path = (URL) iterator.next();
Util.report("Found binding in [" + path + "]");
}
Util.report("See " + MULTIPLE_BINDINGS_URL + " for an explanation.");
}
...
Util
课程如下:
public class Util {
static final public void report(String msg, Throwable t) {
System.err.println(msg);
System.err.println("Reported exception:");
t.printStackTrace();
}
...
该report
方法直接写入System.err
. 一种解决方法可能是在第一次通话之前System.err
将其替换为,但如果这样做,您可能会丢失其他重要消息。System.setErr()
LoggerFactory.getLogger()
当然,您可以下载源代码并删除这些Util.report
调用,并在您的项目中使用修改后的 slf4j-api。