log4j有两种配置方式,一种是.properties一种是.xml.我采用前者.
IDE:JBuilderX
Server:Weblogic8.13 sp6
Frame:Struts1.1
1.下载log4j.jar,放入/lib下.(当前最新版本是1.2.14)
2.在JBuilderX中configure Libraries.然后通过属性对话框把Library加入工程.
3.完成以上两件事后,就被搜到的一篇文章误导了,以为非得要一个commons-logging.properties在/WEB-INF/classes下.于是照着做了.
4.依样画葫芦,放了个log4j.properties在/WEB-INF/classes下.一启动weblogic下的应用程序,就出现错误,console上的错误信息如下:
(具体的log4j.properties的写法网上的例子很多)
<2007-3-26 下午06时45分26秒 CST> <Error> <HTTP> <BEA-101216> <Servlet: "action"
failed to preload on startup in Web application: "ITDevQualityData".
javax.servlet.ServletException
at weblogic.servlet.internal.ServletStubImpl.createServlet(ServletStubIm
pl.java:909)
at weblogic.servlet.internal.ServletStubImpl.createInstances(ServletStub
Impl.java:873)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubI
mpl.java:812)
.......
可见servlet启动异常.
但是,如果把common-logging.properties从/WEB-INF/classes下删除.只留下log4j.properties应用系统就能正常启动, 启动过程出现很多DEBUG信息.
我想这应该是我在log4j.properties中设置的是log4j.rootLogger=ERROR,A1,R的原因.而这些信息很显然是来自启动应用程序的时候lib下带的那些.jar的,很多都来自struts.可见struts本身就是实现通用日志接口来输出log.
再回过头来看commons-logging.properties.它是用来指定日志器的.因为除了log4j外,还有SimpleLog和NoOpLog两种日志实现.这已经包括在commons-logging.jar中.如果我们要用SimpleLog,那么/WEB-INF/classes下就是
org.apache.commons.logging.log=org.apache.commons.logging.impl.SimpleLog
一些文章又提到如果采用log4j,就应该把commons-logging.properties改成
org.apache.commons.logging.log=org.apache.commons.logging.impl.Log4jCategoryLog
(for struts1.2)
或者
org.apache.commons.logging.log=org.apache.commons.logging.impl.Log4JLogger
(for struts1.1)
可是在我的配置实践中,发现根本不需要配置commons-logging.properties.就只需要log4j.properties.
我想那样的设置应该和web服务器的选择或者版本有关系.