Ответ 1
Это была проблема с classpath, и у нас была другая версия log4j в пути к классам. Спасибо Натан Райан!
У меня есть 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)
Это была проблема с classpath, и у нас была другая версия log4j в пути к классам. Спасибо Натан Райан!
Если вы используете 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
Если эта проблема используется с log4j-2.x с commons-logging-1.2. Вернулся назад к log4j 1.2.x, и все в порядке с миром.
Я иногда вижу эту ошибку, когда пытаюсь запустить веб-приложение на tomcat 7 в своем eclipse 3.6. Это происходит из ниоткуда, просто перезапустив eclipse.
После нескольких (!) "очистить все проекты" и новых развертываний веб-приложения на сервере приложение запускается снова. Может быть, кто-то еще знает точное "заклинание" для решения этой тайны без проб и ошибок?
Если вы предоставляете реализацию для журнала, реализация должна определить конструктор, который принимает java.lang.String в качестве аргумента. В противном случае вы получите "org.apache.commons.logging.LogConfigurationException: заданный пользователем класс журнала"... "не может быть найден или недоступен". На странице faq в wiki говорится:
Создаете ли вы какой-либо конкретный проект, например веб-службы или spring и т.д.? Если да, то, пожалуйста, проанализируйте файлы свойств проекта, которые будут иметь свойство в отношении Logger, что-то вроде
<property name="logger">javax.servlet,org.apache.commons.logging</property>
если у вас есть проект java с сервлетами.
Я получил такое же исключение.
У меня есть реализация регистратора.
У него не было конструктора, который принимает строку в качестве аргумента.
Я реализовал такой конструктор и решил проблему для меня.
Я получал эту ошибку, когда в моем пути к классам был apache commons logging jar, но log4j jar был как-то отсутствует. После того, как я добавил log4j jar в мой путь к классу, эта ошибка исчезла.
Здесь есть ответ. Commons-logging with log4j2
Включите библиотеку: log4j-jcl
Смотрите также:
https://logging.apache.org/log4j/2.x/faq.html#which_jars
Эта ошибка кажется довольно общей. Чтобы получить более подробную информацию, запустите 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 в путь к классам устранило проблему.
Я столкнулся с этой проблемой и обнаружил, что это связано с конфликтом путей к классам, связанным с 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>