Search code examples
javamavenlog4jfilenotfoundexception

log4j:ERROR Could not parse file


I waste a lot of time to solve this problem. but can't. may be it is simple.

The jar file of application cant load the log4j.xml file which is the configuration file of log4j.
Here is the code i am using

import org.apache.log4j.xml.DOMConfigurator;
public class LoggerConfig {
    public void configLogger()
    {
        DOMConfigurator.configure("log4j.xml");
    }
}

Its a maven project. and my dir strucure is:

src
  main
    java
    |  com
    |  |  my
    |  |  |  abc
    |  |  |  |  test
    |  |  |  |  |  LoggerConfig.java
    resource
    |   com
    |   |  my 
    |   |  |  abc
    |   |  |  |  test
    |   |  |  |  |  log4j.xml

My classpath file looks like:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java"/>
    <classpathentry kind="src" output="target/classes" path="src/main/resources"/>  
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

My log4j.xml looks like

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
  <appender name="file" class="org.apache.log4j.FileAppender">
    <param name="File" value="target/test.log" />
    <param name="Append" value="false" />
    <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="[%p] [%d{HH:mm:ss.SSS}] %m%n" />
    </layout>
  </appender>
  <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <param name="Threshold" value="DEBUG" />
    <layout class="org.apache.log4j.PatternLayout">
      <!-- The default pattern: Date Priority [Category] Message\n -->
      <param name="ConversionPattern" value="[%p] [%d{HH:mm:ss.SSS}] %m%n" />
    </layout>
  </appender>
  <root>
    <priority value="INFO" />
    <appender-ref ref="console" />
    <appender-ref ref="file" />
  </root>
</log4j:configuration>

Thanks for any help..


Solution

  • As per the DOMConfigurator code the argument passed to it is treated as a File name. Instead of that try using the classpath resource

      public void configLogger()
        {
            URL u = getClass().getClassLoader().getResource("com/my/abc/test/log4j.xml");
            DOMConfigurator.configure(u);
        }