我有一个在 Glassfish 中运行的 Grails 应用程序,但是当我取消部署时,它会出现
违反类不变性
快速查看堆栈跟踪并在网络上搜索报告,这是 Log4j 的问题
我当时使用的是最新的log4jlog4j-1.2.16.jar
任何如何克服此错误的建议。
[Mon, 22-Aug-2011 @ 09:23:32.494] [admin-thread-pool-4848(64)] ERROR javax.enterprise.system.std.com.sun.enterprise.server.logging - java.lang.IllegalStateException: Class invariant violation
at org.apache.log4j.LogManager.getLoggerRepository(LogManager.java:199)
at org.apache.log4j.LogManager.getLogger(LogManager.java:228)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:243)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)
[Edit 1]
我刚刚在 spring 源码论坛上发现了这个,这很有趣:
建议采取以下措施来避免此问题:
- 将 org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES 系统属性设置为 false。
- 应用 bug 40212 中的补丁或升级到应用了该补丁的版本。
- 升级到 log4j 1.2.16 或更高版本,以更好地防御类加载器攻击或在发生攻击时提供更好的诊断消息。
[解决方案]
设置属性
org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES = false
Glassfish 中的domain.xml 文件解决了该问题
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)