クラスパスに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)
これはクラスパスの問題であり、クラスパスに別のバージョンのlog4jがありました。ネイサンライアンに感謝します!
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>
コモンズのみを宣言した場合-エラーが発生してログに記録するLog4JLogger cannot be found or is not useable
Commons-logging-1.2でlog4j-2.xを使用すると、この問題が発生しました。 log4j 1.2.xに戻り、すべてが問題ありません。
Eclipse3.6のTomcat7でWebアプリケーションを実行しようとすると、このエラーが表示されることがあります。 Eclipseを再起動するだけでどこからともなく発生します。
いくつかの(!)「すべてのプロジェクトをクリーンアップ」し、サーバーにWebアプリを新たに展開した後、アプリケーションが再度実行されます。たぶん、誰か他の人が試行錯誤せずにこの謎を解くための正確な「呪文」を知っていますか?
ロガーの実装を提供する場合、実装はJava.lang.Stringを引数として取るコンストラクターを定義する必要があります。そうしないと、「org.Apache.commons.logging.LogConfigurationException:ユーザー指定のログクラス '...'が見つからないか、使用できません」というメッセージが表示されます。 Apache wikiの faq ページはそう述べています。
WebサービスやSpringなどの特定のプロジェクトを作成していますか?はいの場合は、ロガーを参照するプロパティを持つプロジェクト固有のプロパティファイルを分析してください。
<property name="logger">javax.servlet,org.Apache.commons.logging</property>
サーブレットを使用したJavaプロジェクトがある場合。
ここに答えがあります Commons-logging with log4j2
ライブラリを含める:log4j-jcl
参照:
https://logging.Apache.org/log4j/2.x/faq.html#which_jars
これと同じ例外が発生しました。
私はロガーの実装を持っています。
文字列を引数として取るコンストラクターはありませんでした。
私はそのようなコンストラクターを実装しました、そしてそれは私のために問題を解決しました。
Apache commons logging jarがクラスパスにあるときにこのエラーが発生していましたが、log4jjarが何らかの理由で欠落していました。 log4j jarをクラスパスに追加すると、このエラーはなくなりました。
私はこの問題に直面していて、log4jjarに関連するクラスパスの競合が原因であることがわかりました。プロジェクトで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>
このエラーはかなり一般的なようです。詳細を取得するには、次のオプションを使用して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をクラスパスに追加すると、問題が修正されました。