使用log4j 2时遇到log4j 1错误

时间:2019-11-12 20:22:35

标签: log4j log4j2

我已经尝试过了: Mixing log4j 1.x and log4j 2 with third party libraries dependending on log4j 1.x

当我将jar文件部署到docker映像时,却收到log4j 1追加程序错误,但是在Eclipse中运行main方法时却看不到该错误。

log4j:WARN找不到记录器的附加程序(blah)。 log4j:WARN请正确初始化log4j系统。 log4j:WARN有关更多信息,请参见http://logging.apache.org/log4j/1.2/faq.html#noconfig

这是我的依赖项

    <dependencies>
    <!-- QUARTZ Required -->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.3.2</version>
    </dependency>

    <!-- Kafka -->
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.12</artifactId>
        <version>2.3.1</version>
    </dependency>

    <!-- SSO Web Form -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.11.3</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.34.1</version>
    </dependency>

    <!-- JSON -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.10.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.10.0</version>
    </dependency>
    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
        <version>2.4.0</version>
    </dependency>

    <!-- CSV -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-csv</artifactId>
        <version>1.7</version>
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.29</version>
    </dependency>

    <!-- SQL -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc</artifactId>
        <version>${ojdbc.version}</version>
    </dependency>

    <!-- Test -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.8.9</version>
        <scope>test</scope>
    </dependency>
</dependencies>

我尝试删除所有可能引用log4j 1的内容(包括log4j-1.2-api)以进行编译和测试(除了删除代码中对slf4j的引用并使用log4j api之外)均无济于事。

启动我的jar文件的命令是:

java -Dlog4j.configurationFile=$LOGGING_CFG -Ddatacollector.config.dir=$CONFIG_DIR -jar blah.jar

我已验证我的参数有效,并确保该配置在IDE中有效。我什至尝试使用Configurator.initialize(name,filePath)以编程方式加载文件。我怀疑log4j 1在我的环境中存在,我想将其清除。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我通过将Maven程序集插件版本更新为3.1.1解决了该问题。

       <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <!-- Needed to get the correct log4j -->
            <version>3.1.1</version>
            <executions>
                <execution>
                    <id>distrib</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <appendAssemblyId>false</appendAssemblyId><!--$NO-MVN-MAN-VER$ -->
                        <outputDirectory>docker/jar/</outputDirectory>
                        <archive>
                            <manifest>
                                <mainClass>my.main.class</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <finalName>my-app-${project.version}</finalName>
                    </configuration>
                </execution>
            </executions>
        </plugin>