ログインしたいMavenとSpringのアプリがあります。SLF4Jを使用したいと思っています。
すべての構成ファイルをlog4j.xmlを含むディレクトリ{classpath}/configに配置し、Spring Beanを使用して初期化します。
例えば.
<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.springframework.util.Log4jConfigurer"/>
<property name="targetMethod" value="initLogging"/>
<property name="arguments">
<list>
<value>classpath:config/log4j.xml</value>
</list>
</property>
</bean>
ただし、この警告が表示され、ログは記録されません。
log4j:WARNロガー(org.springframework.context.support.ClassPathXmlApplicationContext)のアペンダーが見つかりませんでした。 log4j:WARN log4jシステムを適切に初期化してください。 log4j:WARN詳細については、 http://logging.Apache.org/log4j/1.2/faq.html#noconfig を参照してください。
私はグーグルで調べましたが、これをセットアップする簡単な例を見つけることができません。何か案は?
Jatinの答えに加えて:
SpringはJakarta Commons LoggingをロギングAPIとして使用します。 slf4jにログを記録するには、commons-logging
がクラスパスにないことを確認する必要があります。 jcl-over-slf4j
は、commons-loggingの代替jarです。
Mavenを使用している場合は、mvn dependency:tree
を使用してcommons-loggingが発生する場所を検出し、依存関係の除外を使用してそれを必要とするすべての依存関係から除外できます。ただし、mvn dependency:tree
を数回実行する必要がある場合があります。これは、推移的な依存関係の最初の発生のみを表示するためです。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
https://github.com/mbogoevici/spring-samples/tree/master/mvc-basic/trunk にサンプルがあります。ロギングを有効にするには、POMファイルにいくつかの依存関係を含める必要があります。
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>runtime</scope>
</dependency>
完全を期すために、logback-classic
バリアント:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.6</version>
<scope>runtime</scope>
</dependency>
ただし、忘れないでくださいdisable commons-logging
依存関係これは、受け入れられた(Stijnの)回答のように、Springの依存関係から発生します。
classpath
のJCL API
の実装には、ブロー構成を使用します。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.0.RELEASE</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.5.8</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.8</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.8</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>runtime</scope>
</dependency>
</dependencies>
詳細情報の確認 こちら
デフォルトパッケージにlog4jファイルを保持
私はログバックの方法が好きで、slf4jについても同様の設定を行います:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
slf4j-log4j12はslf4j-apiとlog4jを自動的に導入するので、それほど多くの依存関係を置く必要はありません
lazy-init="false"
を追加して、ルートコンテキストでlog4j構成のBeanを積極的にロードします。これで警告メッセージlog4j:WARN No appenders could be found for logger
が解決するはずです
例:
<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" lazy-init="false">
より良いアプローチは、web.xmlまたはJVMパラメーターとして構成を使用することです(-Dlog4j.configuration=.../conf/log4j.xml
または 'file:'プレフィックスを-Dlog4j.configuration=file:conf/log4j.properties
として使用する場合もあります)