我正在测试Log4j2,我不知道我做错了什么,因为我从Apache下载了库并将它们放在了类路径中。我也添加了xercesImpl,xalan,xml-apis,serializer,xsltc,但异常仍然存在。我展示了堆栈跟踪和配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<Property name="log-path">C:/Logs/</Property>
</Properties>
<Appenders>
<RollingFile name="RollingFile" fileName="${log-path}/myexample.log"
filePattern="${log-path}/myexample-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1 KB" />
</Policies>
<DefaultRolloverStrategy max="4" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="root" level="debug" additivity="false">
<appender-ref ref="RollingFile" level="debug" />
</Logger>
<Root level="debug" additivity="false">
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>
ERROR StatusLogger Error parsing C:\W7des\cliente\Test\bin\log4j2.xml javax.xml.parsers.ParserConfigurationException: Feature 'http://apache.org/xml/features/xinclude' is not recognized.
at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
at org.apache.logging.log4j.core.config.xml.XmlConfiguration.newDocumentBuilder(XmlConfiguration.java:85)
at org.apache.logging.log4j.core.config.xml.XmlConfiguration.<init>(XmlConfiguration.java:137)
at org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory.getConfiguration(XmlConfigurationFactory.java:44)
at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:472)
at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:442)
at org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(ConfigurationFactory.java:254)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:419)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:138)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:207)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:160)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:492)
at pac.Main.<clinit>(Main.java:14)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
提前致谢。
答案 0 :(得分:10)
就我而言,从类路径中删除过时的xercesImpl-2.6.2.jar
会有所帮助。
答案 1 :(得分:1)
从gradle缓存中删除xerces目录后为我工作。
cd ~/.gradle/caches/modules-2/files-2.1
rm -rf xerces
答案 2 :(得分:0)
Oracle JVM附带了一个支持XInclude的XML解析器。 根据此文档http://www-03.ibm.com/systems/resources/sdkguide.zos.pdf,IBM J9 VM还捆绑了支持XInclude的XML解析器(参见第21页XML4J 4.5)。
我不确定是否有必要使用单独的XML解析器(您提到使用的是Xerces而不是与JVM捆绑在一起的XML解析器)。 您使用的是什么版本的Xerces / Xalan?如果从类路径中删除自定义XML解析器会发生什么?
顺便说一下,如果Log4j无法启用XInclude,它将输出WARN级别的StatusLogger消息。 您是否收到以&#34; DocumentBuilderFactory开始的任何WARN级StatusLogger消息...&#34;?请在您的问题中包含这些消息。
不幸的是,目前Log4j中没有切换来阻止它尝试启用XInclude功能。我怀疑上面的问题是配置问题,但如果无法解决,您可以请求将此类交换机添加为新的Log4j功能。这个地方是Log4j Jira issue tracker。