启动嵌入式jetty时指定系统属性

时间:2015-12-10 10:38:35

标签: java web-applications log4j jetty

我有一个具有 log4j 配置的Web应用程序。在指定要放置日志文件的路径时,此配置使用系统属性 catalina.home

现在我正在准备集成 junit 测试套件,该测试套件加载嵌入式码头并加载此Web应用程序(然后我使用rest rest et all进行测试)。我的问题是,由于此web应用程序现在从jetty catalina.home 加载系统属性未预先指定,使日志文件存储在Windows C:/ logs的根目录中/...

我需要一种方法来指定从码头使用的 catalina.home 。最初我尝试使用:

System.setProperty("catalina.home", "target/jetty/tests/");

但这似乎被忽略了。

我无法弄清楚为什么以上不起作用以及如何使其发挥作用。谁能在这里提出一些建议?谁有人遇到同样的问题?

1 个答案:

答案 0 :(得分:0)

日志记录是一种特殊的野兽,它很早就初始化 ,这通常是JVM在您的应用程序中初始化的第一件事。

在此过程中使用System.setProperty("catalina.home", "target/jetty/tests/");可能为时已晚,因为在您设置该属性之前,log4j可能已经初始化。

为了获得最佳成功,您需要检查以下内容......

  • 您的测试用例不应声明静态Logger实例
  • 您的System.setProperty应出现在测试用例的static { }块中
  • 出于测试原因,您可以使用src/test/resources(或log4j.properties)文件的log4j.xml替换(也称为覆盖),并在其中指定备用日志目录路径。< / LI>
  

加分:您应该在Gradle或Maven环境中查找并使用${project.basedir}${basedir}系统属性,并使用它们来创建完全限定的绝对路径您的System.setProperty()调用,特别是如果您有多模块构建,因为相对路径将始终来自${user.dir}(也称为PWD),并且不会因正常构建设置而发生变化。< / p>