1
votes

I am trying to log using log4j in my Java EE application in the following way where i have defined a log4j.xml in the application.

I am trying to access it using

   DOMConfigurator.configure( "src/log4j.xml");
   logger.warn( "Login Process has started a warning message" );

but it keeps throwing the following error

** edited error message

log4j:ERROR Could not parse file [src/log4j.xml].
 java.io.FileNotFoundException: D:\src\log4j.xml (The system cannot find the path s     pecified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
at org.apache.log4j.xml.DOMConfigurator$1.parse(DOMConfigurator.java:749)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:866)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:755)

When i provided the absolute path everything is working .

So whats the way to achieve this? I am using 1.2.16.jar version of log4j

and i get following warning each time i build the app

log4j:WARN No appenders could be found for logger     (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Edited: Application struture

Myapp
  src
  conf
  target

and i have palced log4j.xml under folder src

log4j.xml file

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
    </layout>
</appender>
   <appender name="Log" class="org.apache.log4j.FileAppender">
    <param name="File" value="Web.log" />
    <param name="Append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{DATE} %-5p %-15c{1}: %m%n" />
    </layout>
</appender>

<logger name="com.web" additivity="false">
    <level value="info" />
    <appender-ref ref="Log" />
</logger>

</log4j:configuration>

Thanks

3
Where is the log4j file located in your application? - cowls
The currently accepted answer of Prabhat is a WTF. Renaming the extension of a valid log4j.xml file to a wrong one? Did it really solve your concrete problem? The answerer clearly has no idea that it's also possible to configure log4j by XML instead of by Properties. - BalusC
No replacing the log4j.xml to src/resources solved the problem. and pls do mind your language - Sam
You should not accept incorrect answers. This is misleading for future readers who have exactly the same problem as you. Ask the answerer to remove/fix incorrect suggestion or post your own answer. - BalusC

3 Answers

1
votes

configure web.xml file like this.

   <!-- these are at the top of the xml configuration file -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>WEB-INF/conf/log4j.xml</param-value>
    </context-param>

    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>api.root</param-value>
    </context-param> 

    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- ... -->

This may help you : http://forum.springsource.org/showthread.php?30800-SpringMVC-XML-Log4j-Logging-not-functioning

0
votes

Try changing

DOMConfigurator.configure( "src/log4j.xml");

To

DOMConfigurator.configure( "/src/log4j.xml");
0
votes

Better put it inside src/main/resources folder.

You can also rename it to log4j.properties, depending on your file format.
And you should have either log4j.jar, or if you are using maven add dependencies to pom.xml file.