在WAS5.1上 部署,如果我选择PARENT_LAST的话,总会报一个错误,如下:
[Servlet 错误]-[action]:无法装入 servlet:java.lang.ExceptionInInitializerError
Caused by: org.apache.commons.logging.LogConfigurationException: The chosen LogFactory implementation does not extend LogFactory. Please check your configuration. (Caused by java.lang.ClassCastException: com.ibm.ws.commons.logging.TrLogFactory)
Caused by: java.lang.ClassCastException: com.ibm.ws.commons.logging.TrLogFactory
网上查了,说是was有自己的LogFactory,认不出commons.logging的logger。
反正解释很多,解决办法也很多,有一个解决办法就是说在源文件根目录下新建一个任意命名的properties,里面加入:
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
然后有人又说,这句话不推荐,应该是
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4jLogger
不过两个方法我都试过,都不行,后来终于在官方网站上找到了解释,地址是:
http://commons.apache.org/logging/troubleshooting.html
解决办法就是用commons-logging-adapters.jar替换commons-logging.jar
我下载了一个commons-logging-adapters.jar,地址如下(非官方的地址)
http://www.java2s.com/Code/Jar/Apache-Common/Downloadcommonsloggingadapters11jar.htm
替换掉后,解决问题。
在tomcat中使用,出错,说找不到logger,后来对比了两个包,发现adapters里面没有impl目录,那tomcat默认没有logFactory,只会去找org.apache.commons.logging.impl,而was默认是找org.apache.commons.logging。adapter我估计是把impl的几个logger从impl摆到了上一层目录,为了适应was而设计的。找不到。看来以后在部署的时候如果要使用PARENT_LAST,才替换adapter这个jar包。