2012-02-12 27 views
4

我正在開發web servlet,並對log4j.properities, 和我定義爲在構造函數中調用初始化記錄器時感到困惑。如何在編寫jUnit for web servlet時管理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 servlet的日誌文件是指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 

但是,而webservlet編碼的JUnit, 日誌文件是指不正確的地址,因爲$ {} catalina.base是空白的文本。 錯誤日誌在這裏。

[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 2015-01-23 20:04:38

回答

6

您應該爲tomcat部署和單元測試維護一個單獨的log4j.properties。單元測試log4j.properties在調試信息上可能會比較重,而部署版本應儘量減少日誌記錄輸出以避免影響性能。

這樣做需要您正確調整類路徑,以便爲單元測試拾取單元測試log4j.properties,但未將其打包到WAR中。通常,這會進入src/test

+0

「將記錄輸出最小化爲避免成爲性能的拖累「:所以重要的消息(錯誤,警告)不會被不重要的消息所淹沒。 – Raedwald 2013-07-05 09:41:01