I'm having a problem using the NTEventLogAppender in log4j 1.0.4 with Tomcat 3.2 and two different web applications. I have both web applications loading the same XML configuration file found in %TOMCAT_HOME%\conf\log4j-config.xml. When the second web app loads, I see the following exception:
java.lang.UnsatisfiedLinkError: Native Library C:\WINNT\NTEventLogAppender.dll already loaded in another classloader
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1346)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1306)
at java.lang.Runtime.loadLibrary0(Runtime.java:749)
at java.lang.System.loadLibrary(System.java:820)
at org.apache.log4j.nt.NTEventLogAppender.<clinit>(NTEventLogAppender.java:120)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:144)
at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:129)
at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfCategoryElement(DOMConfigurator.java:352)
at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:310)
at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:636)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:567)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:513)
at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:582)
at com.itxc.sdialer.ServerDialer.<init>(ServerDialer.java:155)
at java.lang.Class.newInstance0(Native Method)
at java.lang.Class.newInstance(Class.java:237)
at org.apache.tomcat.core.ServletWrapper.loadServlet(ServletWrapper.java:268)
at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:289)
at org.apache.tomcat.context.LoadOnStartupInterceptor.contextInit(LoadOnStartupInterceptor.java:130)
at org.apache.tomcat.core.ContextManager.initContext(ContextManager.java:491)
at org.apache.tomcat.core.ContextManager.init(ContextManager.java:453)
at org.apache.tomcat.startup.Tomcat.execute(Tomcat.java:195)
at org.apache.tomcat.startup.Tomcat.main(Tomcat.java:235)
Here are the pertinent lines from my log4j-config.xml file:
...
<appender name="EventLog" class="org.apache.log4j.nt.NTEventLogAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d %-5p [%t] %c (%F:%L) - %m"/>
/>
</layout>
</appender>
<!-- The two servlets belong to the com.itxc.sdialer and com.itxc.eclipse packages. -->
<category name="com.itxc">
<priority value="warn" />
<appender-ref ref="EventLog" />
</category>
<root>
<priority value ="debug" />
<appender-ref ref="RollingFile" />
</root>
What do I have to do in order to get two (or more) webapps to both log to the NT Event Log?
Thanks in advance for your help.
Eli Tucker
ITXC Corp.