如何在编写jUnit for web servlet时管理log4j.properties

时间:2012-02-12 15:31:07

标签: tomcat junit log4j

我正在开发web servlet并且与log4j.properities混淆, 我定义了在构造函数中调用initialize logger。

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进行测试时停止输出日志文件。

1 个答案:

答案 0 :(得分:6)

您应该为tomcat部署和单元测试维护单独的log4j.properties。单元测试log4j.properties可能在调试信息上更重,而部署版本应该最小化日志记录输出以避免拖累性能。

执行此操作需要您正确地处理类路径,以便单元测试log4j.properties被选中以进行单元测试,但不会打包到WAR中。通常,这会进入src/test