Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启动嵌入式jetty时指定系统属性_Java_Web Applications_Log4j_Jetty - Fatal编程技术网

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

Java 启动嵌入式jetty时指定系统属性,java,web-applications,log4j,jetty,Java,Web Applications,Log4j,Jetty,我有一个web应用程序,它具有log4j配置。此配置在指定放置日志文件的路径时使用系统属性catalina.home 现在我正在准备集成junit测试套件,该套件加载嵌入式jetty并加载此web应用程序(然后我使用rest调用等进行测试)。我的问题是,由于此web应用程序现在是从jetty catalina加载的。home系统属性没有预先指定,因此日志文件将存储在windows C:/logs/…的根目录中 我需要一种方法来指定从jetty使用的catalina.home。最初我尝试使用: S

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

现在我正在准备集成junit测试套件,该套件加载嵌入式jetty并加载此web应用程序(然后我使用rest调用等进行测试)。我的问题是,由于此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可能在您设置该属性之前就已经初始化了

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

  • 您的测试用例不应该声明静态记录器实例
  • 您的
    System.setProperty
    应该出现在testcase上的
    静态{}
    块中
  • 也许出于测试原因,您可以用
    src/test/resources
    替换(aka override)您的
    log4j.properties
    (或
    log4j.xml
    )文件,并在其中指定其他日志目录路径
奖励:您应该从Gradle或Maven环境中查找并使用
${project.basedir}
${basedir}
系统属性,并使用它们为您的
系统.setProperty()
调用创建完全限定的绝对路径,特别是如果您有多模块构建,因为相对路径总是从
${user.dir}
(又名PWD)开始,并且这不会随着正常的构建设置而改变


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

使用
System.setProperty(“catalina.home”、“target/jetty/tests/”)在这个过程中可能太晚了,因为log4j可能在您设置该属性之前就已经初始化了

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

  • 您的测试用例不应该声明静态记录器实例
  • 您的
    System.setProperty
    应该出现在testcase上的
    静态{}
    块中
  • 也许出于测试原因,您可以用
    src/test/resources
    替换(aka override)您的
    log4j.properties
    (或
    log4j.xml
    )文件,并在其中指定其他日志目录路径
奖励:您应该从Gradle或Maven环境中查找并使用
${project.basedir}
${basedir}
系统属性,并使用它们为您的
系统.setProperty()
调用创建完全限定的绝对路径,特别是如果您有多模块构建,因为相对路径总是从
${user.dir}
(又名PWD)开始,并且这不会随着正常的构建设置而改变


启动junit测试程序时添加-Dcatalina.home=target/jetty/tests/是否有帮助?ramp 1:不幸的是没有。无论哪种方式,我都希望环境是从单元测试编程准备的。您确定Jetty使用的是log4j配置吗?Jetty不直接支持log4j,您可能会看到非log4j输出,并假设生成了它的log4j。我确信,创建的日志文件的名称、相对路径和日志消息模式都是在log4j中指定的。请更正我的预览消息到ramp。我更喜欢以编程方式指定属性。您的-Dcatalina.home=target/jetty/tests/works解决方案。我第一次在intelij环境属性中指定它,而不是在vm选项中指定它。现在再试一次,似乎成功了。我是否可以通过编程的方式来实现这一点?在启动junit测试程序时添加-Dcatalina.home=target/jetty/tests/是否有帮助?ramp 1:不幸的是没有。无论哪种方式,我都希望环境是从单元测试编程准备的。您确定Jetty使用的是log4j配置吗?Jetty不直接支持log4j,您可能会看到非log4j输出,并假设生成了它的log4j。我确信,创建的日志文件的名称、相对路径和日志消息模式都是在log4j中指定的。请更正我的预览消息到ramp。我更喜欢以编程方式指定属性。您的-Dcatalina.home=target/jetty/tests/works解决方案。我第一次在intelij环境属性中指定它,而不是在vm选项中指定它。现在再试一次,似乎成功了。我是否可以通过编程来完成这项工作?src/test/resources替代者工作了。静态块不起作用,不知道为什么,无论哪种方式,我都需要在测试用例中记录日志,所以我更喜欢在测试资源中使用第二个log4j。我从来没有想到log4j会在我启动jetty之前初始化,因为这是我做的第一件事,尽管看起来你是对的。src/test/resources replacemens成功了。静态块不起作用,不知道为什么,无论哪种方式,我都需要在测试用例中记录日志,所以我更喜欢在测试资源中使用第二个log4j。我从来没有想到log4j会在我启动jetty之前初始化,因为这是我做的第一件事,尽管看起来你是对的。