Удалите один из 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 в вашем проекте.