【问题标题】:How to manage log4j.properties in coding jUnit for web servlet如何在为 web servlet 编写 jUnit 时管理 log4j.properties
【发布时间】:2012-02-12 15:31:07
【问题描述】:

我正在开发 web servlet 并与 log4j.properities 混淆, 我定义在构造函数中调用初始化记录器。

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

【问题讨论】:

标签: tomcat junit log4j


【解决方案1】:

您应该为 tomcat 部署和单元测试维护一个单独的 log4j.properties。单元测试log4j.properties 可能需要更多的调试信息,而部署版本应尽量减少日志输出以避免拖累性能。

这样做需要您正确处理类路径,以便单元测试log4j.properties 被用于单元测试,但不会被打包到 WAR 中。按照惯例,这进入src/test

【讨论】:

  • “最小化日志输出以避免拖累性能”:因此重要的消息(错误、警告)不会被不重要的消息淹没。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2022-11-04
  • 1970-01-01
相关资源
最近更新 更多