我收到此错误消息
[严重:异常将上下文初始化事件发送到类的监听器实例org.springframework.web.util.Log4jConfigListener java.lang.IllegalStateException:Web应用程序根系统属性已设置为不同的值:'webapp.root'= [C:\ Users\jaanlai\Documents\NetBeansProjects\absSovellus\build\web]而不是[C:\ Users\Administrator\Documents\NetBeansProjects\keycard2\build\web] - 在web.xml中为"webAppRootKey"context-param选择唯一值文件!
这很奇怪,因为我的文件中没有定义任何webAppRootKey.它是什么?
mbl*_*inn 63
这webAppRootKey
是Spring在几个地方使用的上下文参数.在这种情况下,它被使用Log4jWebConfigurer
.它将webapp根作为可以在log4j配置文件中使用的系统属性公开,如下所示:
log4j.appender.testfile.File=${webapp.root}/WEB-INF/testlog.log
Run Code Online (Sandbox Code Playgroud)
如果您出于某种原因希望找到相对于您的webapp根目录的日志,则可以使用此方法.
您遇到的问题是某些容器(特别是Tomcat)不维护系统属性的每个webapp映射.如果不指定a webAppRootKey
,则Spring默认为webapp.root
.由于您在同一容器中运行了两个应用程序,因此您尝试启动的第二个应用程序会看到webAppRootKey
已经设置(通过默认设置),并引发错误.否则,webAppRootKey
将被设置错误,您可能最终得到来自另一个webapp中的一个webapp的日志.
您可以webAppRootKey
在web.xml
喜欢中指定不同的使用上下文参数:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root.one</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
和
log4j.appender.testfile.File=${webapp.root.one}/WEB-INF/testlog.log
Run Code Online (Sandbox Code Playgroud)
在你的log4j中.这应该照顾冲突.
Mik*_*ger 52
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
...
这解决了我的问题.感谢: - http://forum.springsource.org/archive/index.php/t-32873.html
axt*_*avt 18
Log4jConfigListener
您的应用程序服务器中似乎有几个具有默认配置的Web 应用程序.
默认行为Log4jConfigurationListener
是将webapp root公开为名为的系统属性webapp.root
,以允许您在指定日志文件位置时使用它.但是,如果已存在具有相同名称的系统属性,则会引发异常.
您可以配置每个应用程序的名称为系统属性使用<context-param>
命名webAppRootKey
或禁用通过设置系统属性中暴露Log4jConfigListener
的<init-param>
命名log4jExposeWebAppRoot
来false
.
也可以看看:
归档时间: |
|
查看次数: |
47161 次 |
最近记录: |