Java Can';t使用系统属性变量创建RollingFileAppender

Java Can';t使用系统属性变量创建RollingFileAppender,java,log4j2,Java,Log4j2,使用系统属性变量创建RollingFileAppender时,我遇到以下错误 ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile. java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAcc

使用系统属性变量创建RollingFileAppender时,我遇到以下错误

ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile. 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:498)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:132)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:918)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:858)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:850)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:479)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:219)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:231)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:496)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:566)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:582)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:217)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
at com.hifx.lens.services.AvroSerializerFactory.<init>(AvroSerializerFactory.java:16)
at com.hifx.lens.services.AvroSerializerFactory.init(AvroSerializerFactory.java:43)
at com.hifx.lens.Accumulo.main(Accumulo.java:31)
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:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.ClassCastException: org.apache.logging.log4j.core.appender.FileManager cannot be cast to org.apache.logging.log4j.core.appender.rolling.RollingFileManager
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:103)
at org.apache.logging.log4j.core.appender.RollingFileAppender.createAppender(RollingFileAppender.java:191)
... 27 more
如果我将RollingFile_Appender的文件名更改为使用属性名ie:

fileName: ${LOG_PATH}/log.log 
然后错误消失,一切正常

如果我使用File_Appender(它也使用相同的系统属性变量(sys:LOG_PATH)),那么一切都正常工作

如果我将sys:更改为env: 我认为jackson有一些解析问题。 我需要从环境变量配置日志路径

使用的依赖项是

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.6.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.6.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.2.0</version>
    </dependency>        
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>2.6.2</version>
    </dependency>

org.apache.logging.log4j
log4japi
2.6.2
org.apache.logging.log4j
log4j型芯
2.6.2
com.fasterxml.jackson.dataformat
jackson数据格式yaml
2.2.0
com.fasterxml.jackson.core
杰克逊核心
2.2.0
com.fasterxml.jackson.core
杰克逊数据绑定
2.2.0
org.apache.logging.log4j
log4jcl
2.6.2

有人请帮帮我这是因为您定义了File_Appender和RollingFile_Appender来登录到同一个文件。它们有点“拥有”自己的日志文件,因此一旦为
${sys:log\u PATH}/log.log
创建了文件追加器,就不能创建指向同一文件的RollingFile追加器。配置文件中的第二个appender尝试创建一个负责该文件的LogManager,发现第一个appender已经存在,因此尝试强制转换到它需要的类中,但失败了

如果将RollingFile_Appender移到File_Appender上方,则异常情况为:

main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.FileAppender for element File. java.lang.reflect.InvocationTargetException
现在,RollingFile_Appender将拥有
${sys:LOG_PATH}/LOG.LOG
文件,并且由于同样的原因,您将无法创建文件_Appender


解决方案:删除其中一个Appender,同时使用这两个Appender没有任何意义-它们必须相互竞争,或者将每个Appender指向不同的文件。

这是因为您定义了文件Appender和滚动文件Appender以登录到同一个文件。它们有点“拥有”自己的日志文件,因此一旦为
${sys:log\u PATH}/log.log
创建了文件追加器,就不能创建指向同一文件的RollingFile追加器。配置文件中的第二个appender尝试创建一个负责该文件的LogManager,发现第一个appender已经存在,因此尝试强制转换到它需要的类中,但失败了

如果将RollingFile_Appender移到File_Appender上方,则异常情况为:

main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.FileAppender for element File. java.lang.reflect.InvocationTargetException
现在,RollingFile_Appender将拥有
${sys:LOG_PATH}/LOG.LOG
文件,并且由于同样的原因,您将无法创建文件_Appender

解决方案:删除其中一个appender,同时使用这两个appender没有任何意义-它们必须相互竞争,或者将每个appender指向不同的文件