为什么我无法在类layout.XmlLayout中调用工厂方法?

时间:2014-11-26 08:51:58

标签: java xml logging configuration log4j2

我正在尝试将log4j2中的布局设置为XMLLayout。

我收录了POM jackson-annotations,jackson-module-jaxb-annotations,jersey-media-json-jackson。此外,当我使用PatternLayout登录到控制台或文件一切正常。当我想使用XMLLayout时,我得到如下异常。此外,它与此线程中的几乎相同的异常:Log4j2 SyslogAppender not working,但解决方案仅适用于Appender,我认为它不起作用,因为没有mdcId属性。

XML

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
    <Console name="console" target="SYSTEM_OUT">
         <XMLLayout />
        <!--PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/-->
    </Console>
    <!--Flume name="EventLogger" compress="true" type="Embedded">
        <Agent host="192.168.1.50" port="41414"/>
        <RFC5424Layout enterpriseNumber="18060" includeMDC="true" appName="MyApp"/>
    </Flume-->
    <File name="MyFile" fileName="logs/app.log">
        <!--XMLLayout /-->

    </File>
</Appenders>

<Loggers>
    <Logger name="EventLogger" level="warn">
        <AppenderRef ref="console"/>
    </Logger>
    <Root level="warn" additivity="false">
        <AppenderRef ref="MyFile"/>
    </Root>
</Loggers>
</Configuration>

异常

2014-11-26 09:22:45,975 ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.layout.XmlLayout for element XMLLayout. java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:135)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:766)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:706)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:698)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:698)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:358)

2 个答案:

答案 0 :(得分:1)

你可能错过了杰克逊的依赖。你检查了依赖树了吗? http://logging.apache.org/log4j/2.x/log4j-core/dependencies.html#Dependency_Tree

您可能需要以下所有这些:

  • com.fasterxml.jackson.core:杰克逊 - 芯:罐:2.4.2
  • com.fasterxml.jackson.core:杰克逊 - 数据绑定:罐:2.4.2
  • com.fasterxml.jackson.core:杰克逊 - 注解:罐:2.4.0
  • com.fasterxml.jackson.dataformat:杰克逊 - DATAFORMAT-XML:罐:2.4.2
  • com.fasterxml.jackson.module:杰克逊 - 模块JAXB的注解:罐:2.4.2
  • org.codehaus.woodstox:stax2-API:罐:3.1.4

答案 1 :(得分:0)

添加woodstox-core-5.0.3.jar:

例如这是我的类路径:

JavaSE-1.8
jackson-annotations-2.7.0.jar
jackson-core-2.7.0.jar
jackson-databind-2.7.0.jar
jackson-dataformat-xml-2.1.1.jar
log4j-api-2.5.jar
log4j-core-2.5.jar
hamcrest-core-1.3.jar
junit-4.12.jar
stax2-api-3.1.4.jar
woodstox-core-5.0.3.jar

和XMLLayout有效。