Какая основная причина Log4JLogger не может быть найдена или не используется?

У меня есть 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)

Ответ 1

Это была проблема с classpath, и у нас была другая версия log4j в пути к классам. Спасибо Натан Райан!

Ответ 2

Если вы используете Maven, вы должны обеспечить объявление commons-logging и log4j в pom.xml

<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

Ответ 3

Если эта проблема используется с log4j-2.x с commons-logging-1.2. Вернулся назад к log4j 1.2.x, и все в порядке с миром.

Ответ 4

Я иногда вижу эту ошибку, когда пытаюсь запустить веб-приложение на tomcat 7 в своем eclipse 3.6. Это происходит из ниоткуда, просто перезапустив eclipse.

После нескольких (!) "очистить все проекты" и новых развертываний веб-приложения на сервере приложение запускается снова. Может быть, кто-то еще знает точное "заклинание" для решения этой тайны без проб и ошибок?

Ответ 5

Если вы предоставляете реализацию для журнала, реализация должна определить конструктор, который принимает java.lang.String в качестве аргумента. В противном случае вы получите "org.apache.commons.logging.LogConfigurationException: заданный пользователем класс журнала"... "не может быть найден или недоступен". На странице faq в wiki говорится:

Создаете ли вы какой-либо конкретный проект, например веб-службы или spring и т.д.? Если да, то, пожалуйста, проанализируйте файлы свойств проекта, которые будут иметь свойство в отношении Logger, что-то вроде

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

если у вас есть проект java с сервлетами.

Ответ 6

Я получил такое же исключение.

У меня есть реализация регистратора.

У него не было конструктора, который принимает строку в качестве аргумента.

Я реализовал такой конструктор и решил проблему для меня.

Ответ 7

Я получал эту ошибку, когда в моем пути к классам был apache commons logging jar, но log4j jar был как-то отсутствует. После того, как я добавил log4j jar в мой путь к классу, эта ошибка исчезла.

Ответ 9

Эта ошибка кажется довольно общей. Чтобы получить более подробную информацию, запустите JVM с помощью этой опции:

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

В моем случае обнаружены некоторые недостающие зависимости.

[[email protected] from [email protected]] Attempting to instantiate 'org.apache.commons.logging.impl.Log4JLogger'
[[email protected] from [email protected]] Trying to load 'org.apache.commons.logging.impl.Log4JLogger' from classloader [email protected]
[[email protected] from [email protected]] 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'
[[email protected] from [email protected]] The log adapter 'org.apache.commons.logging.impl.Log4JLogger' is missing dependencies when loaded via classloader sun.misc.[email protected]: 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 в путь к классам устранило проблему.

Ответ 10

Я столкнулся с этой проблемой и обнаружил, что это связано с конфликтом путей к классам, связанным с 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>