使用maven構建項目時,若是項目中有log4j的依賴,在運行程序時可能會出如今同一個類中log4j-over-slf4j.jar和 slf4j-log4j12.jar衝突的問題:html
項目報錯內容爲:java
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.log4j.LogManager.getLogger(LogManager.java:44)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657)
at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:173)apache
Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
at org.apache.log4j.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:49)
... 8 moremaven
緣由是:log4j-over-slf4j和slf4j-log4j12是跟Java日誌系統相關的兩個jar包,當它們同時出如今classpath下時,就可能會引發堆棧溢出異常。oop
解決辦法:pom.xml文件中,在使用到的依賴包中添加<exclusion>標籤將slf4j-log4j12.jar排除便可:字體
例如:紅色字體是排除的內容url
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>spa