2017-04-15 9 views
1

私はこれを春のブートサンプルに基づいてpom.xmlと書いています。どのようにlog4jの様々なパッケージの競合を解決するには?

そして、私は私のアプリを起動したとき、私はこのエラーを得た:

SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError.

私は、JavaとMav​​enに全く新たなんだ、とかなり長い間ここに立ち往生。

dependencyと書きました。しかしそれはうまくいかなかった。どのパッケージをどのパッケージから除外すべきか分かりません。もしそうなら、どのように依存しているパッケージが正常に動作しますか?

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <!-- Your own application should inherit from spring-boot-starter-parent --> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-samples</artifactId> 
     <version>2.0.0.BUILD-SNAPSHOT</version> 
    </parent> 
    <artifactId>spring-boot-sample-web-secure-jdbc</artifactId> 
    <name>Spring Boot Web Secure JDBC Sample</name> 
    <description>Spring Boot Web Secure JDBC Sample</description> 
    <url>http://projects.spring.io/spring-boot/</url> 
    <organization> 
     <name>Pivotal Software, Inc.</name> 
     <url>http://www.spring.io</url> 
    </organization> 
    <properties> 
     <main.basedir>${basedir}/../..</main.basedir> 
    </properties> 
    <dependencies> 
     <!-- Compile --> 
     <dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-common</artifactId> 
      <version>3.0.0-alpha2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-thymeleaf</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jdbc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
     </dependency> 
     <!-- Test --> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

アプリケーションを実行するために使用しているコンテナ(サーバー)は何ですか? –

+0

スプリングブートロギングについてこの[post](https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html)を検討してください。これも良い例です(https://www.mkyong.com/spring-boot/spring-boot-slf4j-logging-example/)。 –

答えて

2

spring-boot-starterlog4j-over-slf4j依存関係に引っ張っている、とあなたの他の依存関係の1つが、log4jの中に引っ張っているので、これが起こります。

実行mvn dependency:tree、あなたは不要なのlog4jに引っ張っされた依存関係を見つけると、それだけで、あなたがあなたmvn dependency:tree

に表示されるものに応じて、これらのものであってもよい

<exclusions> 
    <exclusion> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    </exclusion> 
</exclusions> 

でそれを除外することができるはずです

log4jを使いたい場合は、log4j-over-slf4jを代わりにspring-boot-starterから除外してください。

-1

あなたのpom.xmlにはlog4jの依存関係はありません。あなたは、あなたのpom.xmlにこれを置く必要があります。

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version> 
</dependency> 
+0

これは答えが間違っているとします。 'spring-boot-starter-logging'だけが必要です。 –

0

この問題は、ログファサードロギングフレームワークコールの間のエンドレスループによるものです。

https://www.slf4j.org/codes.html#log4jDelegationLoop

私のシナリオでは、もう少し複雑です。このループの問題以外にも。私は二つのログフレームワークを持っています。

log4j-over-slf4jおよびlogback-classicを除いて終了します。

関連する問題