我有一个具有 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/");
但这似乎被忽略了。
我无法弄清楚为什么以上不起作用以及如何使其发挥作用。谁能在这里提出一些建议?谁有人遇到同样的问题?
答案 0 :(得分:0)
日志记录是一种特殊的野兽,它很早就初始化 ,这通常是JVM在您的应用程序中初始化的第一件事。
在此过程中使用System.setProperty("catalina.home", "target/jetty/tests/");
可能为时已晚,因为在您设置该属性之前,log4j可能已经初始化。
为了获得最佳成功,您需要检查以下内容......
System.setProperty
应出现在测试用例的static { }
块中src/test/resources
(或log4j.properties
)文件的log4j.xml
替换(也称为覆盖),并在其中指定备用日志目录路径。< / LI>
加分:您应该在Gradle或Maven环境中查找并使用
${project.basedir}
和${basedir}
系统属性,并使用它们来创建完全限定的绝对路径您的System.setProperty()
调用,特别是如果您有多模块构建,因为相对路径将始终来自${user.dir}
(也称为PWD),并且不会因正常构建设置而发生变化。< / p>