我正在将log4j1.x升级到log4j2.x。为此,我将log4j1.x替换为log4j2.17.1(同时获得log4j-core和api),并且我的pom文件具有版本1.2的commons-logging。我已将www.example.com替换为log4j.propertieslog4j2.properties文件。在部署更改后,在EC2示例中,我收到以下错误。
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.
at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:804)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:541)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:292)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:269)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:655)
Pom文件:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
我有commons-logging.properties文件,其中包含以下代码。
org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger
在我的项目中,他们使用了如下所述的记录器:
A.java
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class A{
public static Log logger = LogFactory.get(A.class);
}
谁能帮帮我。
1条答案
按热度按时间carvr3hs1#
您显式地配置了Jakarta Commons Logging以使用Log4j 1.x。由于类路径上没有它,因此会生成一个错误。
请注意Log4j 1.x和Log4j 2.x不兼容。要将JCL绑定到Log4j 2.x,您需要:
commons-logging.properties
中强制JCL使用Log4j 1.x的条目,编辑:关于您的意见:由于
log4j-jcl
对commons-logging
具有可传递的依赖关系,因此可以从POM文件中删除后者(并对log4j-jcl
使用默认的compile
作用域)。然而,通常的做法是将所有直接在代码中使用的工件添加为
compile
依赖项(参见Maven's dependency:analyze goal),而不依赖于可传递的依赖项(可以更改)。因此,您应该在compile
作用域中同时拥有commons-logging
,在runtime
作用域中同时拥有log4j-jcl
。您还可以考虑从JCL切换到Log4j 2.x API,后者更易于使用(参见documentation)。在这种情况下,您应该从依赖项中删除
commons-logging
,但保留log4j-jcl
以允许其他依赖项使用JCL。