Log4j和WAS的那些烂事

用WAS 5开始,记得一直烦的事情就是怎么样看到log4j打出来的日志。
WAS很搞,自认为follow了sun的标准,于是把common logging打出的日志,用JDK的log来处理。 而开源软件使用最多的还是log4j的日志实现。 于是很多人就开始纠结怎么能让WAS能把日志可以像TOMCAT那样简简单单打出来。

记得曾经搞定过,用的方法就是起一个commons-logging.properties文件,然后放到commons-logging.jar里面就搞定了。

现在做的项目想用同样的方法,结果发现搞不定了@@

用的是WAS 6.1.0.29, commons-logging 1.1.1 然后 log4j 是 1.2.15 日志倒是可以根据log4j.properties里配置的位置出来,可是里面根本没有内容。

于是根据IBM的官方文档[url]http://www-01.ibm.com/support/docview.wss?uid=swg27010153[/url],依葫芦画瓢照着做,里面提供两种方法,一个是我原先用的commons-logging.properties,一个是在WAR包里创建一个诡异的文件:META-INF/services/org.apache.commons.logging.LogFactory,里面放入org.apache.commons.logging.impl.Log4jFactory。

但是不管怎么样就是不出来。

查了N多文档,最后终于能让超级无比贵的WAS能做到和免费的TOMCAT一样的功能:打日志。

讲到这里,从搜索引擎过来正在啃手指,皱眉头,愁于解决问题的TX们急了,show me the money!

OK, 这是我的步骤:
1. commons-logging.properties放入

priority=1
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

这个文件放在哪里无所谓,试过直接放到WAR包里的 WEB-INF/classes下,以及WEB-INF/lib下任何一个Jar包里都可。
2. War包里起个文件META-INF/services/org.apache.commons.logging.LogFactory
放入
org.apache.commons.logging.impl.Log4jFactory

3. 把log4j和commons-logging.jar包放入classloader能找到的地方,如WAR包里的WEB-INF/lib下,或者share lib里面。

其实上面关键的地方就是那个commons-logging.jar,我试了N把都有问题,最后发现不能使用最新的1.1.1版本,必须使用[color=red]1.0.3[/color]的版本才可以。 也许这个就是关键,其实上面的步骤1和2应该是只要有一步就行了。

你可能感兴趣的:(log4j,Apache,Tomcat,IBM,Web)