ClassNotFoundException:org.apache.commons.logging.LogFactory
Webアプリケーションを起動しますが、次のエラーメッセージが表示されます。
... 原因:java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory ...
1.通常のケース
1.1明らかに、Apache Commonsのロギングはありません。 `commons-logging-xxx.jar`です。これを修正するには、Mavenセントラルリポジトリから取得してください。
pom.xml
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
2.スプリングケース
2.1 Springアプリケーションでは、開発者は常に `commons-logging`を除外しますが、別のロギングフレームワークを組み込むことは忘れてしまいます。例えば
pom.xml
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
上記の宣言により、この `classNotFoundException:org.apache.commons.logging.LogFactory`も発生します。
2.2これを修正するには、別のロギングフレームワークを宣言します。これはSLF4jであり、ブリッジを介してSpringのロギングをリダイレクトします。
pom.xml
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- bridge jck to slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${jcl.slf4j.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency>
参考文献
Commons Logging]。リンク://spring-mvc/spring-mvc-logback-slf4j-example/[Spring MVC
ログバックSLF4jの例]