2016-09-01 19 views
0

システムプロパティー変数を使用してRollingFileAppenderを作成すると、次のエラーが発生しました。システムプロパティー変数を持つ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 

マイlog4j2.yml構成ファイルが

Configutation: 
    name: Default 
    Properties: 
     Property: 
      name: LOG_PATH 
      value: "logs" 
     Appenders: 
     Console: 
      name: Console_Appender 
      target: SYSTEM_OUT 
      PatternLayout: 
      pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" 
    File: 
     name: File_Appender 
     fileName: ${sys:LOG_PATH}/log.log 
     PatternLayout: 
     pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" 

    RollingFile: 
     name: RollingFile_Appender 
     fileName: ${sys:LOG_PATH}/log.log 
     filePattern: "logs/archive/rollingfile.log.%d{yyyy-MM-dd-hh-mm}.gz" 
     PatternLayout: 
     pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" 
     Policies: 
     SizeBasedTriggeringPolicy: 
      size: 100 KB 
     DefaultRollOverStrategy: 
     max: 30 

    Loggers: 
    Root: 
     level: debug 
     AppenderRef: 
     - ref: RollingFile_Appender 

    Logger: 
      - name: Accumulo_File_logger 
      level: debug 
      AppenderRef: 
       - ref: File_Appender 

私はつまり、プロパティ名を使用してRollingFile_Appenderのファイル名を変更した場合は次のとおりです。

fileName: ${LOG_PATH}/log.log 

エラーが消え、すべてが正常に動作しています。

同じSystemプロパティ変数(sys:LOG_PATH)も使用しているFile_Appenderを使用している場合は、すべて正常に動作します。

sys:をenvに変更した場合と同じエラー: ジャックソンとの解析に問題があると思います。 環境変数からログパスを設定する必要があります。使用

依存

<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> 

誰かが同じファイルへのログインにFile_AppenderとRollingFile_Appenderの両方を定義したので、これは

答えて

1

私を助けてくださいされています。それらはある種のログファイルを所有しているため、${sys:LOG_PATH}/log.log用にFile appenderが作成されると、同じファイルを指すRollingFileアペンダを作成することはできません。設定ファイル内の2番目のアペンダーは、ファイルを担当するLogManagerを作成しようとします。最初に見つかったものを探し出し、必要なクラスにキャストしようとします。失敗します。

あなたはFile_Appender上RollingFile_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ファイルを所有し、あなたが同様の理由File_Appenderを作成することはできません。

解決策:アペンダーの1つを削除してください。両方のアペンダーを同時に使用すると、意味が分かりません。競合するか、それぞれを別のファイルに指し示す必要があります。

+0

感謝のボス、あなたは正しいです。 –