2012-02-12 10 views
4

webサーブレットを開発していて、log4j.properitiesと混乱しています。 と、コンストラクタでinitialize loggerを呼び出すように定義しました。webサーブレット用のjUnitのコーディングでlog4j.propertiesを管理する方法

public static Logger logger = Logger.getLogger(MyProject.class.getName()); 
public MyProject() { 
    super(); 
    // TODO Auto-generated constructor stub 
    ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
    URL url = loader.getResource("log4j.properties"); 
    PropertyConfigurator.configure(url); 
} 

通常、Webサーブレットに関するログファイルは、tomcatのログディレクトリを参照します。

log4j.rootLogger=debug, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${catalina.base}/logs/myproject.log 
log4j.appender.R.MaxFileSize=100KB 
log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 

しかし、$ {catalina.base}が空白のテキストであるため、webservletのためのJUnitをコーディング中、 ログファイルは、不適切なアドレスを指します。 エラーログはこちらです。

[junit] log4j:ERROR setFile(null,true) call failed. 
[junit] java.io.FileNotFoundException: /logs/myproject.log (No such file or directory) 

ですから、ログファイルについて私に賢明な管理を教えてください。 jUnitでテスト中に出力ログファイルを停止したいと考えています。

+0

http://stackoverflow.com/questions/24231773/specifying-a-custom-log4j-properties-file-for-all-of-junit-tests-run-from-eclips – Raedwald

答えて

6

tomcatの配置と単体テスト用に別のlog4j.propertiesを維持する必要があります。ユニットテストlog4j.propertiesは、デバッグ情報に重くなりがちですが、デプロイメントバージョンでは、ロギング出力を最小限に抑えてパフォーマンスに影響を与えないようにする必要があります。

これを行うには、ユニットテストのためにユニットテストlog4j.propertiesが選ばれるが、WARにパッケージ化されないように、クラスパスを正しくジャグリングする必要があります。従来は、src/testになりました。

+0

「ログ出力を最小限に抑える」も参照してください。パフォーマンスに影響を与えないようにしてください。重要なメッセージ(エラー、警告)は、重要でないメッセージに襲われません。 – Raedwald

関連する問題