Tidsbaseret udløsningspolitik i log4j2
1 angiver her 1 dag og ikke 1 time. Jeg har manuelt testet med nedenstående konfiguration.
<RollingFile name="T" fileName="/data_test/log/abc.log"
filePattern="/data_test/log/abc-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<Pattern>%d{ISO8601} %-5p [%t] (%F:%L) - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="100 KB" />
</Policies>
</RollingFile>
For manuel test ændrer jeg systemets dato og klokkeslæt. Prøv først med at øge 1 time. Logfilerne vil blive genereret, men ikke som forventet. Skift derefter systemdatoen, øg med 1 dag og se resultaterne.
Antag, at den sidste logfil (abc.log) på dag 29-okt er på 50 KB. Konfigurationsstørrelsen er 100 KB. Hvis vi ændrer dagen (forøg med 1 dag) og derefter kører. Derefter vil sidste fil blive omdøbt 29-okt-(noget sekvensnummer).log (50 KB fil, som den kopieres) og ny fil vil blive oprettet med abc .log
Jeg har prøvet dette med simpel servlet med nedenstående konfiguration i web.xml
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>log4j2.xml</param-value>
</context-param>
hold log4j2.xml i src-mappen. log4j2.xml indlæses ikke, hvis vi beholder det i classpath.
Log4j dokumentation:
interval -> (heltal) Hvor ofte en rollover skal ske baseret på den mest specifikke tidsenhed i datomønsteret. For eksempel, med et datomønster med timer som det mest specifikke element og en stigning på 4 rollovers vil forekomme hver 4. time. Standardværdien er 1.
Du bør ændre filnavnsmønsteret, hvis du vil oprette det hver time.
Som Abid nævnte, fortolkes intervalværdi i sammenhæng med mønster, der er angivet som en del af filePattern. Det starter med laveste pålydende. For eksempel, hvis mønsteret indeholder S, vil frekvensen være i millisekunder. Det understøtter datomønsteret som beskrevet i detaljer som en del af SimpleDateFormat java doc http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html