gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:27 26 4
gpt4 key购买 nike

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

现在我正在准备集成junit测试套件,该套件加载嵌入式 jetty 并加载此网络应用程序(然后我使用其余调用等进行测试)。我的问题是,由于这个 Web 应用程序现在是从 jetty catalina.home 加载的,所以系统属性没有预先指定,使得日志文件存储在 Windows 的根目录 C:/logs/...

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

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

但这似乎被忽略了。

我不明白为什么上面的方法不起作用以及如何让它起作用。有人可以在这里提出建议吗?有人遇到过同样的问题吗?

最佳答案

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

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

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

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

Bonus: You should look for, and use ${project.basedir} and ${basedir} System Properties from the Gradle or Maven environment, and use them to make a fully qualified absolute path for your System.setProperty() call, especially if you have a multi-module build, as the relative path will always be from ${user.dir} (aka PWD) and that doesn't change with a normal build setup.

关于java - 启动嵌入式jetty时指定系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34199679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com