2012-05-28 2 views
6

更新 - この問題は自分自身の問題でした。IDEAでのlog4j.propertiesの検索

この特定のテストクラスには、何かが記録されたことを確認するテストがありました。セットアップでは、以前はすべてのアペンダーを削除していましたが、テスト時間アサーションを作成するために自分のアペンダーを追加しました。そのテストは終わってから長いですが、このナゲットはセットアップに残っています: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#noconfiglog4j uses Thread.getContextClassLoader().getResource() to locate the default configuration filesと言います。しかし、私のテストではThread.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 

答えて

6

私はのIntelliJ IDEAにSLF4Jでのlog4jを使用していますが、それは私のために完璧に動作します。あなたのアプリlog4j設定のどこかに置くより

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

:ちょうどのIntelliJでアプリケーションの依存関係にこれらのjarファイルが含まれています。しかし、ソースとして、あるいはあなたがテストソースとしてのテストにそれを使用した場合のIntelliJでlog4j.propertiesの位置をマークすることを忘れないでください:

log4j.properties:

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

これが役に立ちます。

+1

ありがとうございます。残念ながら、それは助けにはならない。 – Synesso

+0

オオプス、問題は自分の責任でした。更新された質問をご覧ください。 slf4jは必要ありませんが、正しいlog4j.propertiesを少し修正できます。 – Synesso

+0

ありがとうございました、 "ソース"としてマークして、私の問題を解決しました! \ o / – koenmetsu