用户指定的日志类'org.apache.commons.logging.impl.Log4JLogger'找不到或无法使用

时间:2012-07-07 08:42:09

标签: java log4j websphere-6.1

我在网络应用程序中工作。我尝试用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)

1 个答案:

答案 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