Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Xml 春天的天气_Xml_Spring - Fatal编程技术网

Xml 春天的天气

Xml 春天的天气,xml,spring,Xml,Spring,我收到了这个错误消息 [严重:向类org.springframework.web.util.Log4jConfigListener的侦听器实例发送上下文初始化事件时出现异常 java.lang.IllegalStateException:Web app根系统属性已设置为不同的值:“webapp.root”=[C:\Users\jaanlai\Documents\NetBeansProjects\absSovellus\build\Web]而不是[C:\Users\Administrator\Do

我收到了这个错误消息

[严重:向类org.springframework.web.util.Log4jConfigListener的侦听器实例发送上下文初始化事件时出现异常 java.lang.IllegalStateException:Web app根系统属性已设置为不同的值:“webapp.root”=[C:\Users\jaanlai\Documents\NetBeansProjects\absSovellus\build\Web]而不是[C:\Users\Administrator\Documents\NetBeansProjects\keycard2\build\Web]——请为Web.xml文件中的“WebApprotKey”上下文参数选择唯一值


这很奇怪,因为我的文件中没有定义任何WebApprotKey。它是什么?

看起来您的应用程序服务器中有几个Web应用程序具有默认的
Log4jConfigListener
配置

Log4jConfigurationListener
的默认行为是将webapp root作为名为
webapp.root
的系统属性公开,以允许您在指定日志文件位置时使用它。但是,如果具有相同名称的系统属性已经存在,则会引发异常

您可以使用名为
WebApprotKey
为该系统属性配置每个应用程序名称,或者通过将
Log4jConfigListener
名为
的log4jExposeWebAppRoot
设置为
false
来禁用系统属性的公开

另请参见:


WebApprotKey是Spring在几个地方使用的上下文参数。在这种情况下,
Log4JWebConfigure
正在使用它。它将webapp根作为系统属性公开,可以在log4j配置文件中使用,如下所示:

log4j.appender.testfile.File=${webapp.root}/WEB-INF/testlog.log 
如果出于某种原因,希望定位相对于webapp根目录的日志,则可以使用此选项

您遇到的问题是一些容器(特别是Tomcat)不要维护系统属性的每个webapp映射。如果不指定
webAppRootKey
,Spring会将其默认为
webapp.root
。由于您在同一容器中运行两个应用,因此尝试启动的第二个应用会看到
webAppRootKey
已设置(通过默认设置),并引发错误。否则,
webAppRootKey
将设置不正确,您可能会在另一个webapp中看到来自一个webapp的日志

您可以使用
web.xml
中的上下文参数指定不同的
webAppRootKey
,如下所示:

<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webapp.root.one</param-value>
</context-param>

在您的log4j中。这应该可以解决冲突。

以防其他人在没有解决问题的情况下执行了上述操作:

我们的webapp正确设置了WebApprotKey,但我仍然遇到了上述异常。重新启动Glassfish并重新部署相同的war文件有效,如图所示。


<context-param>
 <param-name>log4jExposeWebAppRoot</param-name>
 <param-value>false</param-value>
</context-param>
log4jExposeWebAppRoot 假的

这为我解决了问题。归功于:-

如果您使用
logback
而不是
log4j
并得到相同的错误,这将解决此问题:

<context-param>
 <param-name>logbackExposeWebAppRoot</param-name>
 <param-value>false</param-value>
</context-param>

logbackExposeWebAppRoot
假的

请参阅并获取解决方案,如果404-请求的源不可用,这会阻止应用程序运行吗?@michaeljackson4ever:我想不会。毕竟,您可以通过删除
Log4jConfigListener
来检查它。我遇到了应用程序无法运行的问题。设置根键没有帮助。请注意,我们也有同样的问题您的解决方案解决了这个问题。(不要让其他人认为问题只存在于Tomcat)我在JBoss上也遇到了这个问题,你的解决方案对我很有效。@MichaelLucas Websphere v8上的问题除了日志记录之外还有什么影响吗?@indybee…不,我不这么认为。很久以前很难记住,但我想它只影响了log4j.nice,我打算在maven中定义一个属性,然后过滤web.xml。但后来就不会了在开发中,我使用mongrel eclipse插件在我的Web应用程序中启动tomcat。谢谢,它也帮助了我!63 v 52 v 18 v alsoRans,在第38季度,截至20191114。
<context-param>
 <param-name>logbackExposeWebAppRoot</param-name>
 <param-value>false</param-value>
</context-param>