上述所给代码出错,显示SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/apache-maven-3.6.1/maven_repository/org/slf4j/slf4j-reload4j/1.7.36/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/D:/apache-maven-3.6.1/maven_repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Reload4jLoggerFactory] log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at WordCountTest.SortNumbers.main(SortNumbers.java:48)
时间: 2023-08-28 17:05:57 浏览: 230
这个错误是因为项目中引入了多个 SLF4J 绑定,造成了冲突。可以通过在项目的 pom.xml 文件中排除其中一个冲突的依赖来解决此问题。例如,如果你想排除 slf4j-log4j12 的依赖,可以按照以下方式操作:
```
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
```
在排除依赖后,重新编译和运行程序,就可以避免上述错误了。此外,log4j:WARN No appenders could be found for logger 的警告信息可能是因为没有正确配置 log4j,可以参考警告信息中提供的链接来了解如何配置 log4j。最后,java.lang.ArrayIndexOutOfBoundsException 错误可能是因为程序中访问了数组的越界元素,需要检查程序中的数组访问代码是否正确。
相关问题
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in
SLF4J(Simple Logging Facade for Java)是一个为Java应用程序提供日志记录的简单门面(facade)框架。它允许开发人员在应用程序中使用统一的API进行日志记录,而无需关注具体的日志实现细节。
关于你提到的错误信息"Class path contains multiple SLF4J bindings. SLF4J: Found binding in...",这是由于在应用程序的类路径中存在多个SLF4J绑定引起的。SLF4J只允许存在一个绑定,否则会导致冲突。
解决这个问题的方法是在应用程序的类路径中只保留一个SLF4J绑定。你可以通过以下步骤来解决这个问题:
1. 确定你的应用程序使用了哪些依赖项,并查找它们是否包含了SLF4J绑定。
2. 如果发现多个SLF4J绑定,选择其中一个并将其从依赖项中移除。
3. 如果你无法确定哪个依赖项包含了SLF4J绑定,可以尝试使用Maven或Gradle等构建工具来排除冲突的依赖项。
slf4j: class path contains multiple slf4j bindings. slf4j: found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/staticloggerbinder.class] slf4j: found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf
### 回答1:
这是一个警告信息,表示在路径中包含了多个不同的Slf4j(简单日志门面)绑定。在这个例子中,一个Slf4j绑定在/usr/local/hive/lib/目录下的log4j-slf4j-impl-2.10.0.jar文件中,另一个绑定在/usr/local/hadoop/share/hadoop/common/lib/目录下的slf文件中。可能需要检查系统配置,以消除这种绑定重复的情况。
### 回答2:
4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]。
这个错误信息是因为在程序运行时,发现有多个SLF4J日志绑定在类路径中。SLF4J是一个简化日志系统的接口,它的目的是让应用程序能够方便地切换不同的日志实现。由于SLF4J是一个接口,而实现SLF4J的日志库有很多,例如Log4j、Logback、Java Util Logging、Commons Logging等等,这些库都可以实现SLF4J所定义的接口,因此在使用SLF4J时,需要一个SLF4J实现和一个日志库实现。
在这个错误信息中,我们可以看到有两个不同的SLF4J绑定,一个在hadoop的lib目录下的slf4j-log4j12-1.7.25.jar中,另一个则在hive的lib目录下的log4j-slf4j-impl-2.10.0.jar中。这两个绑定都包含了同样的类,因此会产生冲突。
在解决这个错误之前,需要了解应用程序使用的日志库和SLF4J实现。如果使用的是Log4j,那么可以删除hive中的log4j-slf4j-impl-2.10.0.jar,因为Log4j本身已经包含了SLF4J。如果使用的是其他日志库,可以将hadoop中的slf4j-log4j12-1.7.25.jar删除,因为其他日志库中也都包含了SLF4J。
如果应用程序必须使用两个不同的日志库,可以使用exclude命令排除不需要的库,例如在pom.xml文件中排除hadoop的slf4j-log4j12-1.7.25.jar。这样就可以避免SLF4J的多重绑定问题。
总之,在遇到SLF4J多重绑定错误时,需要了解应用程序使用的日志库和SLF4J实现,并使用适当的方法解决冲突。
### 回答3:
这个错误信息意味着项目中同时存在多个slf4j的绑定器。在这种情况下,slf4j会自动选择其中之一,但是选择哪一个并不明确。由于绑定器的实现方式可能不同,这可能会导致日志输出上的问题。因此,最好只保留一种绑定器。
在这个具体例子中,错误信息显示了两个slf4j绑定器的位置。第一个是在 "/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar" 中,而第二个在 "/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar" 中。两个绑定器都与log4j有关,这意味着项目中同时使用了log4j和slf4j。
为了解决这个问题,应该确保只使用一种绑定器。在这个案例中,由于log4j-slf4j-impl-2.10.0.jar已经包含了两者的功能,因此建议删除 "/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar",并重新启动应用程序。
如果你在项目中使用了其他日志库,并且出现了类似的错误信息,解决方案也类似。首先,确定所有库的日志绑定器,然后选择一个主要的绑定器,删除其他绑定器,并重新启动应用程序。
阅读全文