获取 org.apache.commons.logging.LogConfigurationException
Getting org.apache.commons.logging.LogConfigurationException
我正在努力将 log4j1.x 升级到 log4j2.x。为此,我将 log4j1.x 替换为 log4j2.17.1(同时获取 log4j-core 和 api)并且我的 pom 文件具有版本 1.2 的 commons-logging。我用 log4j2.properties 文件替换了 log4j.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);
}
谁能帮我解决这个问题。
您明确配置 Jakarta Commons Logging 以使用 Log4j 1.x。由于类路径中没有它,因此会生成错误。
注意 Log4j 1.x 和 Log4j 2.x 不兼容。要将 JCL 绑定到 Log4j 2.x,您需要:
remove/comment commons-logging.properties
中强制 JCL 使用 Log4j 的条目 1.x,
添加适当的 Log4j 2.x 绑定:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.17.1</version>
<scope>runtime</scope>
</dependency>
编辑:关于:因为log4j-jcl
对commons-logging
有传递依赖,你可以从POM文件中删除后者(并使用 log4j-jcl
的默认 compile
作用域)。
然而,通常的做法是将您直接在代码中使用的所有工件添加为 compile
依赖项(参见 Maven's dependency:analyze goal)并且不依赖传递依赖项(这可以改变).因此,您应该在 compile
范围内同时拥有 commons-logging
,在 runtime
范围内拥有 log4j-jcl
。
你也可以考虑从JCL换成Log4j2.xAPI,这样更容易使用(cf.documentation)。在这种情况下,您应该从依赖项中删除 commons-logging
,但保留 log4j-jcl
以允许您的其他依赖项使用 JCL。
我正在努力将 log4j1.x 升级到 log4j2.x。为此,我将 log4j1.x 替换为 log4j2.17.1(同时获取 log4j-core 和 api)并且我的 pom 文件具有版本 1.2 的 commons-logging。我用 log4j2.properties 文件替换了 log4j.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);
}
谁能帮我解决这个问题。
您明确配置 Jakarta Commons Logging 以使用 Log4j 1.x。由于类路径中没有它,因此会生成错误。
注意 Log4j 1.x 和 Log4j 2.x 不兼容。要将 JCL 绑定到 Log4j 2.x,您需要:
remove/comment
commons-logging.properties
中强制 JCL 使用 Log4j 的条目 1.x,添加适当的 Log4j 2.x 绑定:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.17.1</version> <scope>runtime</scope> </dependency>
编辑:关于log4j-jcl
对commons-logging
有传递依赖,你可以从POM文件中删除后者(并使用 log4j-jcl
的默认 compile
作用域)。
然而,通常的做法是将您直接在代码中使用的所有工件添加为 compile
依赖项(参见 Maven's dependency:analyze goal)并且不依赖传递依赖项(这可以改变).因此,您应该在 compile
范围内同时拥有 commons-logging
,在 runtime
范围内拥有 log4j-jcl
。
你也可以考虑从JCL换成Log4j2.xAPI,这样更容易使用(cf.documentation)。在这种情况下,您应该从依赖项中删除 commons-logging
,但保留 log4j-jcl
以允许您的其他依赖项使用 JCL。