Java 如何解决log4j不同版本上的包冲突?

Java 如何解决log4j不同版本上的包冲突?,java,spring,maven,dependencies,packages,Java,Spring,Maven,Dependencies,Packages,我根据一个spring引导示例编写了这个pom.xml 当我启动我的应用程序时,我遇到了以下错误: SLF4J:在类路径上检测到log4j-over-SLF4J.jar和绑定的SLF4J-log4j12.jar,抢占StackOverflowerError。 我对Java和Maven完全陌生,在这里呆了很长一段时间 我试着在依赖项中编写一些排除项。但是没有成功。我不知道哪个包裹应该被排除在哪个包裹之外。如果是这样,所依赖的软件包如何正常工作 <?xml version="1.0" enco

我根据一个spring引导示例编写了这个
pom.xml

当我启动我的应用程序时,我遇到了以下错误:

SLF4J:在类路径上检测到log4j-over-SLF4J.jar和绑定的SLF4J-log4j12.jar,抢占StackOverflowerError。

我对Java和Maven完全陌生,在这里呆了很长一段时间

我试着在
依赖项
中编写一些
排除项
。但是没有成功。我不知道哪个包裹应该被排除在哪个包裹之外。如果是这样,所依赖的软件包如何正常工作

<?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>

4.0.0
org.springframework.boot
弹簧靴样品
2.0.0.1构建快照
spring引导示例web安全jdbc
SpringBootWebSecureJDBC示例
SpringBootWebSecureJDBC示例
http://projects.spring.io/spring-boot/
Pivotal软件公司。
http://www.spring.io
${basedir}/./。。
org.apache.hadoop
hadoop通用
3.0.0-2
org.springframework.boot
弹簧启动安全
org.springframework.boot
弹簧启动装置
org.springframework.boot
弹簧靴启动器jdbc
com.h2数据库
氢
org.apache.httpcomponents
httpclient
测试
org.springframework.boot
弹簧起动试验
测试
org.springframework.boot
弹簧靴起动器
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
springbootmaven插件

我在pom.xml上看到,对log4j没有依赖关系。您应该将其放在pom.xml中:

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

log4j
log4j
1.2.17

发生这种情况是因为
spring boot starter
正在拉入
log4j-over-slf4j
依赖项,而您的另一个依赖项正在拉入log4j

运行
mvn dependency:tree
,您应该能够找到哪个依赖项正在拉入不需要的log4j,并使用

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

org.slf4j
slf4j-log4j12
log4j
log4j
它可能只是其中之一,这取决于您在e
mvn dependency:tree上看到的内容


如果您更愿意使用log4j,那么显然只需将
log4j-over-slf4j
spring boot starter
中排除。

这个问题是由于日志外观日志框架调用之间的无休止循环造成的

我的情况稍微复杂一点。除了这个循环问题。我有两个日志框架


<>我最终排除了<强> Log4J-OFL-SLF4J 和<强> Log>经典< /强> ./p>你使用什么容器(服务器)来运行你的应用程序?考虑一下关于Spring引导日志记录的问题。这也是一个好的答案,假设这个答案是错的<代码>spring boot starter日志记录
是您所需要的全部。