Использование log4j2 и log4j одновременно в проекте Spring - PullRequest
0 голосов
/ 17 марта 2020

У меня есть приложения Spring Boot, которые используют сторонние библиотеки. Эта библиотека использует log4j в качестве регистратора. Когда в пути к классам нет log4j, мое приложение не запускается из-за того, что сторонняя библиотека выдает исключение, указывающее на отсутствие log4j. Чтобы справиться с этим, я решил использовать log4j2 вместо Spring по умолчанию logback. Для этого я добавил следующее в pom.xml:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

Кроме того, чтобы разрешить работу этой трехсторонней библиотеки, я также добавил:

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

Теперь, сторонняя библиотека работает, однако все регистрируется дважды. Как мне справиться с этим?

1 Ответ

2 голосов
/ 17 марта 2020

Вместо добавления зависимости log4j в ваш проект, добавьте log4j 1.x bridge в ваш проект, который гарантирует, что ваша библиотека, которая зависит от log4j, действительно работает с Log4j2, не зная об этом.

Итак, удалите старую зависимость log4j 1.2 и добавьте эту вместо:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.13.1</version>
</dependency>
...