我在网络应用程序中工作。我尝试用WEB-INF / lib / * .jar从我的战争中删除jar复制。这有助于我从战争中排除罐子。虽然在websphere中部署耳朵,但我有以下问题,
我检查了我的war类路径,它包含log4j.jar和common-logging1.1.jar。
请帮助!!!
错误日志:
[7/6/12 22:34:10:577 CEST] 00000165 webapp E com.ibm.ws.webcontainer.webapp.WebApp notifyServletContextCreated SRVE0283E: Exception caught while initializing context: {0}
org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.
at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:874)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310)
答案 0 :(得分:2)
WebSphere 6.1包括Commmons Logging本身,由higher classloader加载而不是Web应用程序。 (您可以通过将this JSP部署到应用程序并输入一个JCL类名来查看加载JCL类的位置。)因此,您已经配置了JCL来加载log4j类,但是更高级别(父级) classloader无法从较低级别的Web应用程序类加载器中看到log4j类。
因此,一个解决方案,特别是如果您需要1.1版本的JCL而不是WebSphere的包含版本(1.0),则将您的WebSphere类加载器策略更改为 parent last 。
由于更改类加载器策略可能会产生其他影响,另一个选择是使用WebSphere的包含版本和use a technique to tell it to use log4j as the logging mechanism within your application。但请注意,由于WebSphere 6.1不包含整个JCL1.0,you'll then need to deploy a full JCL 1.0 with your application。