2017-03-31 1 views
0

Log4j2 hat Probleme beim Lesen des Datums im FilePattern meines RollingFile Appender. Wenn ich eine TimeBasedTriggeringPolicy hinzufüge und meine Config-Datei neu einrichte, erhalte ich folgende Fehlermeldung:Log4j2-RollingFile wird nicht geschrieben, wenn TimeBasedTriggeringPolicy aktiviert ist

"ERROR Es konnten keine Felder in die Builder-Klasse für die Plug-in-Klasse org.apache.logging.log4j.core.appender.RollingFileAppender, element injiziert werden RollingFile.java.lang.IllegalStateException: Muster enthält kein Datum "

Ich habe einen Unterbrechungspunkt in den log4j2-Code gesetzt und festgestellt, dass der Grund dafür ist, dass die Häufigkeitsvariable, die Teil des PatternProcessor-Objekts ist, null ist. Ich weiß nicht, warum das null ist oder wie man es auf etwas anderes als Null setzt.

Wenn ich die TimeBasedTriggeringPolicy auskommentieren, beginnt der Appender zu arbeiten und schreibt die Protokolle in meine Datei.

Hier sind die log4j Abhängigkeiten in meinem POM:

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-api</artifactId> 
    <version>2.7</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-core</artifactId> 
    <version>2.7</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-slf4j-impl</artifactId> 
    <version>2.7</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-web</artifactId> 
    <version>2.6.2</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>1.7.7</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.7</version> 
</dependency> 

Hier ist meine log4j2.xml Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration monitorInterval="30" status="DEBUG"> 
    <Properties> 
     <Property name="baseDir">/logs/oracle/domains/cim</Property> 
    </Properties> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%highlight{%d{DEFAULT} [%t] %-5p %c -%m%n}"/> 
     </Console> 
     <RollingFile name="RollingFile" fileName="${baseDir}/cim.log" 
      filePattern="${baseDir}/cim-%d{yyyy-MM-dd}.log" append="true"> 
      <PatternLayout pattern="%d{DEFAULT} %-5p %c - %m%n"/> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
       <SizeBasedTriggeringPolicy size="10 MB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="31"/> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Logger name="com.cim" level="debug" additivity="true"> 
     <Appender-Ref ref="RollingFile"/> 
    </Logger> 
    <Root level="debug" additivity="false"> 
     <Appender-Ref ref="Console"/> 
    </Root> 
    </Loggers> 
</Configuration> 

Hier ist der erste Stack-Trace nach der Fehlermeldung oben:

at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNextTime(PatternProcessor.java:119) 
    at org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy.initialize(TimeBasedTriggeringPolicy.java:59) 
    at org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy.initialize(CompositeTriggeringPolicy.java:52) 
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.setTriggeringPolicy(RollingFileManager.java:216) 
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.updateData(RollingFileManager.java:439) 
    at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:119) 
    at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114) 
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:128) 
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:135) 
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:58) 
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:942) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:882) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:874) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:498) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:227) 
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:239) 
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:530) 
    at org.apache.logging.log4j.core.LoggerContext.onChange(LoggerContext.java:653) 
    at org.apache.logging.log4j.core.config.ConfiguratonFileWatcher$ReconfigurationRunnable.run(ConfiguratonFileWatcher.java:65) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Antwort

1

Die Fehlermeldung "Muster enthält kein Datum" ist eindeutig falsch, weil Ihr Musterist, die hat ein Datum enthalten

Allerdings gibt es ein Problem mit dem Muster. Sie haben zwei auslösende Richtlinien angegeben, eine datumsbasierte und eine größenbasierte.

Die SizeBasedTriggeringPolicy muss auch etwas in dem Dateimuster, speziell %i, denn wenn diese Politik Trigger, die Datei zu etwas umbenennen muss.

Mit der Größe basierende Politik, die Sie in der Regel mit einem Bündel gerollt Protokolldateien am Ende wie folgt:

app-1.log 
app-2.log 
app-3.log 
... 

Die Dateimuster muss enthält ein %i Umwandlungsmuster, Log4j2 zu sagen, wo den Zähler setzen oder es wird die Datei nicht umbenennen können.

+0

Danke für die Hilfe. Ich hatte ursprünglich% i in der log4j2.xml und es funktionierte immer noch nicht. Ich habe mich gerade so oft neu konfiguriert, um das Problem zu beheben, das ich vergessen habe, als ich es gepostet habe. Ich weiß immer noch nicht, was das Problem war, aber ich verlor irgendwann die Internetverbindung zu meiner Datenbank und musste neu booten, und natürlich fing alles richtig an, lol. Danke noch einmal. – iBeatzPrograms

Verwandte Themen