删除其中一项slf4j-log4j12-1.5.8.jar
or slf4j-log4j12-1.6.0.jar
来自类路径。您的项目不应依赖于不同版本的 SLF4J。我建议您只使用 1.6.0。
如果您使用 Maven,您可以排除传递依赖 http://maven.apache.org/pom.html#Exclusions。这是一个例子:
<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 实现 http://search.maven.org/#artifactdetails%7Corg.slf4j%7Cslf4j-api%7C1.6.2%7Cjar无法删除这些警告。这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.");
}
...
The Util
类如下:
public class Util {
static final public void report(String msg, Throwable t) {
System.err.println(msg);
System.err.println("Reported exception:");
t.printStackTrace();
}
...
The report
方法直接写入System.err
。解决方法可能是替换System.err
with System.setErr() http://download.oracle.com/javase/6/docs/api/java/lang/System.html#setErr%28java.io.PrintStream%29 before首先LoggerFactory.getLogger()
拨打电话,但如果这样做,您可能会丢失其他重要消息。
当然你可以下载源码并删除这些Util.report
调用并在项目中使用修改后的 slf4j-api。