8

更新- この問題は私自身が行ったものです。

ある段階で、この特定のテスト クラスには、何かがログに記録されていることを確認するためのテストがありました。セットアップでは、以前にすべてのアペンダーを削除し、テスト時のアサーションを作成するために独自のアペンダーを追加しました。そのテストはなくなって久しいですが、このナゲットはセットアップに残っていました: Logger.getRootLogger().removeAllAppenders();.

誤報すみません。:)


IDEA には、次のテストがあります。

@Test
public void shouldLog() {
    URL resource = Thread.currentThread().getContextClassLoader()
        .getResource("log4j.properties");
    System.out.println("resource = " + resource);
    final Logger logger = Logger.getLogger(getClass());
    logger.info("Hello world");
}

したがって、次のように出力されます。

"C:\Program Files\Java\jdk1.5.0_18\bin\java" -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 11.1\lib\idea_rt.jar" -ea -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper C:\DOCUME~1\JMAWSO~1.NT3\LOCALS~1\Temp\classpath2294205410661538428.tmp @vm_params C:\DOCUME~1\JMAWSO~1.NT3\LOCALS~1\Temp\vm_params5645362020129462784.tmp com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 au.com.gmm.repo.RepoThreadCleanupServiceTest,shouldLog
resource = file:/C:/user/jem/projects/GMM/out/test/cashflow/log4j.properties
log4j:WARN No appenders could be found for logger (au.com.gmm.repo.RepoThreadCleanupServiceTest).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Process finished with exit code 0

これは有名な問題で、多くの初心者が何度も何度も見ています。今日、それに困惑するのは少しばかげている気がします。

http://logging.apache.org/log4j/1.2/faq.html#noconfigは言うlog4j uses Thread.getContextClassLoader().getResource() to locate the default configuration filesThread.currentThread().getContextClassLoader().getResource("log4j.properties")ただし、私のテストでは問題なくプロパティ ファイルがチェック され、検出されます。

ファイルの内容は次のとおりです。

log4j.rootLogger=DEBUG, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{HH:mm:ss.SSS} %c - %m%n
4

1 に答える 1

7

IntelliJ IDEA の slf4j で log4j を使用していますが、完全に機能します。これらの jar を IntelliJ のアプリケーションの依存関係に含めるだけです。

log4j-1.2.9.jar
slf4j-api-1.5.11.jar
slf4j-log4j12-1.5.11.jar

アプリのどこかにlog4j構成を配置するよりも。ただし、IntelliJ の log4j.properties の場所をソースとしてマークすることを忘れないでください。または、テストでそれをテスト ソースとして使用する場合は、次のようにマークします。

log4j.プロパティ:

log4j.rootLogger=INFO,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %X{file} %c{1} - %m%n

log4j.logger.your.app=DEBUG,yourApp
log4j.additivity.your.app=false
log4j.logger.yourApp=DEBUG,yourApp
log4j.additivity.yourApp=false
log4j.appender.yourApp=org.apache.log4j.ConsoleAppender
log4j.appender.yourApp.layout=org.apache.log4j.PatternLayout
log4j.appender.yourApp.layout.ConversionPattern=%d [%t] %-5p %X{file} %c{1} %m%n
log4j.appender.yourApp.ImmediateFlush=true

次に、Java クラスでこれを使用してロガーを取得します。

private static final Logger LOGGER = LoggerFactory.getLogger(YourApp.class);

また、次のような警告は表示されませんNo appenders could be found for logger

お役に立てれば。

于 2012-05-29T14:52:40.077 に答える