You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by "Sullivan, Sean C - MLG" <Su...@menlolog.com> on 2002/10/29 19:06:43 UTC

RE: subclassing org.apache.log4j.xml.DOMConfigurator, "Could not find log4j.dtd"

I am studying the source code for Log4j

DOMConfigurator.java is where Log4j attempts to access 
log4j.dtd 

/////////////////////////

      Class clazz = this.getClass();
      URL dtdURL = clazz.getResource("/org/apache/log4j/xml/log4j.dtd");
      if(dtdURL == null) {
	LogLog.error("Could not find [log4j.dtd]. Used
["+clazz.getClassLoader()+
		     "] class loader in the search.");
      }
      else {
	LogLog.debug("URL to log4j.dtd is [" + dtdURL.toString()+"].");
	inputSource.setSystemId(dtdURL.toString());
      }
      Document doc = docBuilder.parse(inputSource);


/////////////////////////

Keep in mind that my class, ReloadingDOMConfigurator, is a subclass 
of DOMConfigurator.

The call "this.getClass()" should return a reference to
ReloadingDOMConfigurator.class 

Hmmm.

-Sean


> -----Original Message-----
> From: Sullivan, Sean C 
> Sent: Monday, October 28, 2002 4:02 PM
> Subject: subclassing org.apache.log4j.xml.DOMConfigurator, "Could not find
> log4j.dtd"
> 
> 
> I am using:
> 
> 	Jakarta Log4j 1.2.7
> 	IBM Websphere 3.5
> 
> I built my own subclass of the DOMConfigurator.
> 
> package foo.bar;
> 
> public class ReloadingDOMConfigurator
> 	extends org.apache.log4j.xml.DOMConfigurator
> {
> 
> 	// ... code omitted
> }
> 
> 
> I set the following system properties:
> 
> log4j.configuratorClass=foo.bar.ReloadingDOMConfigurator
> log4j.configuration=file:/foo/config/log4j.xml
> log4j.configDebug=true
> 
> 
> The problem is that Log4j cannot locate the log4j.dtd file
> 
> This is very strange because I confirmed that log4j.dtd is located
> inside of the Log4j JAR file.  I have not modified the log4j JAR file.
> 
> I packaged foo.bar.ReloadingDOMConfigurator class inside of a standalone
> JAR file  (foobar.jar)
> 
> For fun, I put an extra copy of log4j.dtd inside of foobar.jar
> 
>  /org/apache/log4j/xml/log4j.dtd
> 
> For reasons that I do not understand, Log4j cannot find either copy of
> the log4j.dtd file
> 
> Does anybody know what is going on?
> 
> Details below...
> 
> -Sean
> 
> 
> log4j:ERROR Could not find [log4j.dtd]. Used
> [com.ibm.servlet.classloader.DynamicClassLoader@5f5f21] class loader in
> the
> search.
> log4j:ERROR Could not parse input source [org.xml.sax.InputSource@21aa85].
> java.io.FileNotFoundException:
> /floggy/yuck/WebSphere/AppServer/bin/log4j.dtd (No such file or directory)
> 	at java.io.FileInputStream.open(Native Method)
> 	at java.io.FileInputStream.<init>(FileInputStream.java:68)
> 	at
> sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java
> :7
> 2)
> 	at
> sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnecti
> on
> .java:136)
> 	at java.net.URL.openStream(URL.java:818)
> 	at
> org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:
> 79
> 6)
> 	at
> org.apache.xerces.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.ja
> va
> :756)
> 	at
> org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.
> ja
> va:267)
> 	at
> org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDo
> cu
> mentScannerImpl.java:826)
> 	at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocu
> me
> ntFragmentScannerImpl.java:333)
> 	at
> org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:524
> )
> 	at
> org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:580
> )
> 	at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
> 	at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:253)
> 	at
> org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:
> 20
> 1)
> 	at
> org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:672)
> 	at
> org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:616)
> 	at
> org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:584)
> 	at
> foo.bar.ReloadingDOMConfigurator$XMLWatchdog.doOnChange(ReloadingDOMConfig
> ur
> ator.java:60)
> 	at
> org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:
> 80
> )
> 	at
> org.apache.log4j.helpers.FileWatchdog.<init>(FileWatchdog.java:49)
> 	at
> foo.bar.ReloadingDOMConfigurator$XMLWatchdog.<init>(ReloadingDOMConfigurat
> or
> .java:49)
> 	at
> foo.bar.ReloadingDOMConfigurator.doConfigure(ReloadingDOMConfigurator.java
> :8
> 5)
> 	at
> org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverte
> r.
> java:460)
> 	at org.apache.log4j.LogManager.<clinit>(LogManager.java:113)
> 
> 
> 

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re[2]: subclassing org.apache.log4j.xml.DOMConfigurator, "Could not find log4j.dtd"

Posted by Jacob Kjome <ho...@visi.com>.
Hello Sean,

Is that the most recent source for DOMConfigurator?  Ceki made some
very recent changes in CVS.  Just alerting you to that fact.  I
imagine that log4j-1.2.8 will contain the change.

Jake

Tuesday, October 29, 2002, 12:06:43 PM, you wrote:


SSCM> I am studying the source code for Log4j

SSCM> DOMConfigurator.java is where Log4j attempts to access 
SSCM> log4j.dtd 

SSCM> /////////////////////////

SSCM>       Class clazz = this.getClass();
SSCM>       URL dtdURL = clazz.getResource("/org/apache/log4j/xml/log4j.dtd");
SSCM>       if(dtdURL == null) {
SSCM>         LogLog.error("Could not find [log4j.dtd]. Used
SSCM> ["+clazz.getClassLoader()+
SSCM>                      "] class loader in the search.");
SSCM>       }
SSCM>       else {
SSCM>         LogLog.debug("URL to log4j.dtd is [" + dtdURL.toString()+"].");
SSCM>         inputSource.setSystemId(dtdURL.toString());
SSCM>       }
SSCM>       Document doc = docBuilder.parse(inputSource);


SSCM> /////////////////////////

SSCM> Keep in mind that my class, ReloadingDOMConfigurator, is a subclass 
SSCM> of DOMConfigurator.

SSCM> The call "this.getClass()" should return a reference to
SSCM> ReloadingDOMConfigurator.class 

SSCM> Hmmm.

SSCM> -Sean


>> -----Original Message-----
>> From: Sullivan, Sean C 
>> Sent: Monday, October 28, 2002 4:02 PM
>> Subject: subclassing org.apache.log4j.xml.DOMConfigurator, "Could not find
>> log4j.dtd"
>> 
>> 
>> I am using:
>> 
>>       Jakarta Log4j 1.2.7
>>       IBM Websphere 3.5
>> 
>> I built my own subclass of the DOMConfigurator.
>> 
>> package foo.bar;
>> 
>> public class ReloadingDOMConfigurator
>>       extends org.apache.log4j.xml.DOMConfigurator
>> {
>> 
>>       // ... code omitted
>> }
>> 
>> 
>> I set the following system properties:
>> 
>> log4j.configuratorClass=foo.bar.ReloadingDOMConfigurator
>> log4j.configuration=file:/foo/config/log4j.xml
>> log4j.configDebug=true
>> 
>> 
>> The problem is that Log4j cannot locate the log4j.dtd file
>> 
>> This is very strange because I confirmed that log4j.dtd is located
>> inside of the Log4j JAR file.  I have not modified the log4j JAR file.
>> 
>> I packaged foo.bar.ReloadingDOMConfigurator class inside of a standalone
>> JAR file  (foobar.jar)
>> 
>> For fun, I put an extra copy of log4j.dtd inside of foobar.jar
>> 
>>  /org/apache/log4j/xml/log4j.dtd
>> 
>> For reasons that I do not understand, Log4j cannot find either copy of
>> the log4j.dtd file
>> 
>> Does anybody know what is going on?
>> 
>> Details below...
>> 
>> -Sean
>> 
>> 
>> log4j:ERROR Could not find [log4j.dtd]. Used
>> [com.ibm.servlet.classloader.DynamicClassLoader@5f5f21] class loader in
>> the
>> search.
>> log4j:ERROR Could not parse input source [org.xml.sax.InputSource@21aa85].
>> java.io.FileNotFoundException:
>> /floggy/yuck/WebSphere/AppServer/bin/log4j.dtd (No such file or directory)
>>       at java.io.FileInputStream.open(Native Method)
>>       at java.io.FileInputStream.<init>(FileInputStream.java:68)
>>       at
>> sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java
>> :7
>> 2)
>>       at
>> sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnecti
>> on
>> .java:136)
>>       at java.net.URL.openStream(URL.java:818)
>>       at
>> org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:
>> 79
>> 6)
>>       at
>> org.apache.xerces.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.ja
>> va
>> :756)
>>       at
>> org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.
>> ja
>> va:267)
>>       at
>> org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDo
>> cu
>> mentScannerImpl.java:826)
>>       at
>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocu
>> me
>> ntFragmentScannerImpl.java:333)
>>       at
>> org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:524
>> )
>>       at
>> org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:580
>> )
>>       at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
>>       at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:253)
>>       at
>> org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:
>> 20
>> 1)
>>       at
>> org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:672)
>>       at
>> org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:616)
>>       at
>> org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:584)
>>       at
>> foo.bar.ReloadingDOMConfigurator$XMLWatchdog.doOnChange(ReloadingDOMConfig
>> ur
>> ator.java:60)
>>       at
>> org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:
>> 80
>> )
>>       at
>> org.apache.log4j.helpers.FileWatchdog.<init>(FileWatchdog.java:49)
>>       at
>> foo.bar.ReloadingDOMConfigurator$XMLWatchdog.<init>(ReloadingDOMConfigurat
>> or
>> .java:49)
>>       at
>> foo.bar.ReloadingDOMConfigurator.doConfigure(ReloadingDOMConfigurator.java
>> :8
>> 5)
>>       at
>> org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverte
>> r.
>> java:460)
>>       at org.apache.log4j.LogManager.<clinit>(LogManager.java:113)
>> 
>> 
>> 

SSCM> --
SSCM> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
SSCM> For additional commands, e-mail: <ma...@jakarta.apache.org>



-- 
Best regards,
 Jacob                            mailto:hoju@visi.com


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>