我已经尝试过了: 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在我的环境中存在,我想将其清除。
感谢您的帮助。
答案 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>