11

我在类路径中有 commons-logging.jar (v1.0.4) 和 log4j-1.2.8.jar 并得到以下运行时错误:

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:874)
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
4

10 回答 10

15

如果你使用 Maven,你必须确保在 pom.xml 中声明 commons-logging 和 log4j

<dependencies>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.3</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

如果您仅声明 commons-logging 你得到错误Log4JLogger cannot be found or is not useable

于 2014-06-07T08:56:40.090 回答
5

这是一个类路径问题,我们在类路径中确实有另一个版本的 log4j。谢谢内森瑞恩!

于 2013-12-11T20:53:47.943 回答
3

将 log4j-2.x 与 commons-logging-1.2 一起使用时遇到了这个问题。恢复到 log4j 1.2.x,一切都很好。

于 2014-12-11T00:25:08.807 回答
2

当我尝试在 eclipse 3.6 中的 tomcat 7 上运行 Web 应用程序时,有时会看到此错误。只需重新启动 Eclipse,它就会突然出现。

在服务器上多次(!)“清理所有项目”和 Web 应用程序的新部署之后,应用程序再次运行。也许其他人知道确切的“咒语”来解开这个谜团而无需反复试验?

于 2013-04-03T07:00:51.877 回答
2

这里有一个答案 Commons-logging with log4j2

包括库:
log4j-jcl
另见:
https ://logging.apache.org/log4j/2.x/faq.html#which_jars

于 2018-07-12T15:55:07.267 回答
1

如果您要为记录器提供实现,则该实现必须定义一个以 java.lang.String 作为参数的构造函数。否则你会得到一个“org.apache.commons.logging.LogConfigurationException:用户指定的日志类'...'找不到或不可用。” apache wiki的常见问题页面说明了这一点。

您是否正在创建任何特定项目,例如 Web 服务或 Spring 等?如果是,那么请分析项目特定的属性文件,该文件将具有参考记录器的属性,例如

<property name="logger">javax.servlet,org.apache.commons.logging</property>

如果您有一个带有 servlet 的 java 项目。

于 2012-05-22T07:56:52.553 回答
1

我收到了同样的例外。

我确实有记录器的实现。

它没有将 String 作为参数的构造函数。

我实现了这样一个构造函数,它为我解决了这个问题。

于 2013-03-08T18:27:38.640 回答
1

当我的类路径中有 apache commons logging jar 但 log4j jar 不知何故丢失时,我收到了这个错误。一旦我将 log4j jar 添加到我的类路径中,这个错误就消失了。

于 2013-10-18T08:41:12.970 回答
1

这个错误似乎很笼统。要获取更多详细信息,请使用以下选项启动 JVM:

-Dorg.apache.commons.logging.diagnostics.dest=STDOUT

就我而言,发现了一些缺少的依赖项。

[LogFactoryImpl@929338653 from sun.misc.Launcher$AppClassLoader@1442407170] Attempting to instantiate 'org.apache.commons.logging.impl.Log4JLogger'
[LogFactoryImpl@929338653 from sun.misc.Launcher$AppClassLoader@1442407170] Trying to load 'org.apache.commons.logging.impl.Log4JLogger' from classloader sun.misc.Launcher$AppClassLoader@1442407170
[LogFactoryImpl@929338653 from sun.misc.Launcher$AppClassLoader@1442407170] Class 'org.apache.commons.logging.impl.Log4JLogger' was found at 'jar:file:/home/mcadiz/NetBeansProjects/LogFilter/dist/lib/commons-logging-1.2.jar!/org/apache/commons/logging/impl/Log4JLogger.class'
[LogFactoryImpl@929338653 from sun.misc.Launcher$AppClassLoader@1442407170] The log adapter 'org.apache.commons.logging.impl.Log4JLogger' is missing dependencies when loaded via classloader sun.misc.Launcher$AppClassLoader@1442407170: org/apache/log4j/Priority
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)
    at com.oracle.logfilter.LogEntry.<clinit>(LogEntry.java:19)

将 log4j.jar 添加到类路径解决了这个问题。

于 2018-12-04T17:29:43.647 回答
0

我遇到了这个问题,发现这是由于与 log4j jar 相关的类路径冲突。当我在我的项目中使用 maven 时,解决方法是为 log4j 添加一个依赖管理,如下所示。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
于 2019-04-18T11:27:00.543 回答