加载DOM的库时,log4j中的冲突?(不允许在classpath中实现dom的其他实现?)

Cra*_*lus 2 java log4j java-ee tomcat7

我试图将log4j放在Tomcat 7中的Web应用程序中.
我的web应用程序中有log4j库WEB-INF\lib.
我有以下log4j.xmlWEB-INF\classes

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

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

      <!-- Log output to Console -->
      <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
        <param name="Target" value="System.out"/> 
        <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> 
        </layout> 
      </appender>  

      <appender name="rolling" class="org.apache.log4j.RollingFileAppender"> 
        <param name="file" value="myLogfile.log"/>    
        <param name="append" value="true" />
        <param name="encoding" value="UTF-8" />  
        <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> 
        </layout> 
      </appender> 

      <!-- Log to both Console and File -->
      <root> 
        <priority value ="debug" /> 
        <appender-ref ref="console" /> 
        <appender-ref ref="rolling" />
      </root>  
</log4j:configuration>
Run Code Online (Sandbox Code Playgroud)

我记录在例如我知道正在加载的servlet或过滤器中,但我无法在任何地方看到输出日志.

例如

Logger log = Logger.getLogger(MyFilter.class);

doFilter我记录即log.debug("logging information); log.error("logging information);

作为控制台的结果,我无法在Tomcat控制台中看到输出appender,我也看不到myLogfile.log创建的输出.

我不确定这个文件应该在哪里创建.

我只看到System.out来自servlet和过滤器的语句.

我在这做错了什么?

更新:
我有类路径xercesImpl.jarjaxb-impl.jar.这会导致问题吗?

我注意到我之前在Tomcat控制台中错过的以下异常:

log4j:WARN在java的java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)的java.lang.ClassLoader.defineClass1(本地方法)中的默认初始化java.lang.NoClassDefFoundError:org/w3c/dom/ElementTraversal期间出错.位于org.apache的org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2823)的java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)中的lang.ClassLoader.defineClass(ClassLoader.java:615)位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1655)的.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1160)org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java) :1533)位于org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity的org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(未知来源)的org.apache.xerces.parsers.AbstractDOMParser.startDocument(未知来源)来自org.apache.xerces.impl.XMLVersionDetector.startDocume的未知来源 来自org.apache.xerces.parsers.XMLParser.parse的org.apache.xerces.parsers.XML11Configuration.parse(未知来源)的org.apache.xerces.parsers.XML11Configuration.parse(未知来源)的ntParsing(未知来源)(位于org.apache.jache上的org.apache.xerces.parsers.DOMParser.parse(未知来源)org.apache.log4j.xml.DOMConfigurator $ 2.parse(DOMConfigurator)中的未知来源.java:767)org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:866)org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:773)org.apache.log4j. org.apache.log4j.LogManager.(LogManager.java:127)的helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483)位于com.test的org.apache.log4j.Logger.getLogger(Logger.java:117). MyFilter.(MyFilter.java:26)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)at sun.re flect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27),位于java.lang.Class的java.lang.Class.newInstance(Class.java:355)java.lang.reflect.Constructor.newInstance(Constructor.java:513) org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125)中的.newInstance(Class.java:308)org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:256)at org. apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)位于org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:103)org.apache.catalina.core.StandardContext.filterStart(StandardContext.java) :4624)org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5281)org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)org.apache.catalina.core. ContainerBase.addChildInternal(ContainerBase.java:866)位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:842)位于org.apache的org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1095) .catalina.startup.HostConfig $ DeployDirectory.run(HostConfig.java:1617)java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:441)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask) .java:303)at java.util.concurrent.TutureTask.run(FutureTask.java:138)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)at java.util.concurrent.ThreadPoolExecutor $ java.lang.Thread.run中的Worker.run(ThreadPoolExecutor.java:908)(Thread.java:662)由org.apache.catalina.loader中的java.lang.ClassNotFoundException:org.w3c.dom.ElementTraversal引起. webappClassLoader.loadClass(WebappClassLoader.java:1688)位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)... 48更多

log4j:WARN找不到logger(com.test.MyFilter)的appender.log4j:WARN请正确初始化log4j系统.log4j的:WARN见 http://logging.apache.org/log4j/1.2/faq.html#noconfig获取更多信息.

Ale*_*igo 13

可能只是在这里,但你错过了结束 </log4j:configuration>

对于该文件,您可以这样写:

<param name="file" value="/usr/logs/myLogfile.log"/>
Run Code Online (Sandbox Code Playgroud)

要么

<param name="file" value="c:/logs/myLogfile.log"/>
Run Code Online (Sandbox Code Playgroud)

你是如何登录servlet类的?举一个导入和句子的例子

我想你正在做这样的事,不是吗?:

import org.apache.log4j.Logger;

private Logger log = Logger.getLogger(name);
log.debug("Mensaje de debug");
Run Code Online (Sandbox Code Playgroud)

更新:

问题是在尝试解析Log4j XML时,类加载器中缺少依赖项,而不是Log4j配置中的问题.日志显示org/w3c/dom/ElementTraversal缺失.有xercesImpl.jar已时,需要的xml-apis.jar

作为这里所说http://xerces.apache.org/xerces2-j/install.html旧的xerces.jar包含了所有的类在一个罐子,但Xerces的新分布划分它xercesImpl.jarxml-apis.jar

引:

xerces.jar在主发行版中不再可用.您仍然可以从弃用的发行版中下载此jar.xerces.jar是一个包含所有解析器类文件的Jar文件(即,它包含xercesImpl.jar和xml-apis.jar的内容的交集).

使用另一个XML解析器,只需删除xercesImpl.jar并添加另一个实现库.问题只是在没有xml-apis.jar的情况下使用xercesimpl.jar