0
votes

I am facing a problem when using Log4j within my Java EE web application using DOMConfigurator. I have log4j.jar file on my class path, and the path of the log4j.xml file /WEB-INF/config/log4j.xml.

Below is the exception:

  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)

Below is the code getting the log4j.xml file inside a servlet:

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

Entry inside web.xml

    <init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/config/log4j.xml</param-value>
</init-param>
1
You need to provide the real path, e.g., off the servlet context, if you insist on loading it from the file system. IMO it'd be much cleaner to keep it on the classpath, where Log4J defaults to looking for it. - Dave Newton
Follow the instructions in this thread: stackoverflow.com/questions/7151832/… - MrSimpleMind

1 Answers

0
votes

Move your configuration file "log4j.xml" into classpath (/WEB-INF/classes/log4j.xml)

if your log4j.xml is in the classpath, when you start your app-server, it should be loaded automatically.

if you are still getting the path issue. Try this

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

   DOMConfigurator.configure(absoluteDiskPath);

Check this link as well Log4j.xml throw file not found in Java EE application