2013-08-20 37 views
0

我在使用DOMConfigurator的Java EE Web应用程序中使用Log4j时遇到问题。我的类路径上有log4j.jar文件,log4j.xml文件的路径为/WEB-INF/config/log4j.xml在J2EE Web应用程序中的Log4j路径配置错误

以下是例外:

log4j:ERROR Could not parse file [/WEB-INF/config/log4j.xml]. 
    java.io.FileNotFoundException: D:\WEB-INF\config\log4j.xml (The system cannot find the  path specified) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(Unknown Source) 
at java.io.FileInputStream.<init>(Unknown Source) 
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source) 
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 
at org.apache.log4j.xml.DOMConfigurator$1.parse(DOMConfigurator.java:749) 
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:871) 
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:755) 
at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:896) 
at org.tree.egc.Utils.RequestFilter.init(RequestFilter.java:64) 
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295) 
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) 
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115) 
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

下面是得到一个servlet的内部的log4j.xml文件中的代码:

String log4jpath=Config.getInitParameter("log4j");  
    DOMConfigurator.configure(log4jpath); 

web.xml中

<init-param> 
<param-name>log4j</param-name> 
<param-value>WEB-INF/config/log4j.xml</param-value> 
</init-param> 
+0

您需要提供*真正*路径,例如,关闭servlet上下文,如果你坚持从文件系统加载它。国际海事组织(IMO)将它保留在类路径上会更加清洁,其中Log4J默认寻找它。 –

+0

按照此线程中的说明: http://stackoverflow.com/questions/7151832/in-java-web-application-how-to-read-log4j-xml-from-web-inb-conf- location-with-s – MrSimpleMind

回答

0

移动进入你的配置文件“log4j.xml”到类路径中(/WEB-INF/classes/log4j.xml)

如果您的log4j.xml位于类路径中,那么当您启动应用程序服务器时,它应该自动加载。

如果您仍然遇到路径问题。试试这个

ServletContext servletContext = request.getSession().getServletContext(); 
    String log4jpath=Config.getInitParameter("log4j");  
    String absoluteDiskPath = servletContext.getRealPath(log4jpath); 

    DOMConfigurator.configure(absoluteDiskPath); 

检查此链接,以及 Log4j.xml throw file not found in Java EE application

+0

Hi Rakesh,我把log4j.xml放在类路径(/WEB-INF/classes/log4j.xml)上,但仍然是同样的问题。 – Pavnesh

+0

编辑我的答案。请检查。 –

+0

工作精细非常感谢Rakesh – Pavnesh