Ich habe eine RollingRandomAccessFileAppender
mit nur der OnStartupTriggeringPolicy
-Set konfiguriert, aber wenn ich das Attribut max der DefaultRolloverStrategy
auf eine Nummer setzen, generieren die Protokolle weiterhin über diesen Betrag auf unbestimmte Zeit.Wie funktioniert Log4j2 DefaultRolloverStrategy max Attribut wirklich?
Hier ist mein log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingRandomAccessFile
name="RollingRAF"
fileName="logs/app.log"
filePattern="logs/app-%d{[email protected]}.log">
<PatternLayout>
<Pattern>%d %p %c{1.} %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Logger name="myLogger" level="warn">
<AppenderRef ref="RollingRAF"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Ist es, weil ich nicht einen Iterator in meinem Namen Muster haben?
Liegt das daran, dass die Genauigkeit meines Dateinamens auf Sekunden eingestellt ist?
Ist es, weil ich nur die OnStartupTriggeringPolicy
gesetzt habe?
Oder was ist hier los?
Mein Ziel war es, eine rollende Konfiguration einzurichten, die die letzten 5 Anwendungsläufe protokolliert.
Sollten Sie ' ' verwenden, da Sie Datum im Namensmuster verwenden? –
Sionnach733
@ Sionnach733 Hinzufügen/Ändern, das ändert sich nicht viel, es erzeugt unbegrenzte Protokolle. Wenn ich einen Iterator% i hinzufüge und die Genauigkeit auf einen Punkt reduziere, wo ich 5 Logs mit derselben Genauigkeit erzeugen kann, dann überschreibt er alte Logs wie erwartet (zB wenn die Präzision auf Minuten eingestellt ist und ich 5 Logs in 1 Minute erzeuge) , aber sobald sich das Datum ändert (nächste Minute kommt), wird es erlauben, 5 weitere Protokolle zu generieren. Im Idealfall wollte ich nur das Datum im Dateinamen für die Bequemlichkeit nicht Funktionalität, da ich einfach das Datum aus dem Namen weglassen und mit einem einfachen Iterator gehen kann, um zu erreichen, was ich will. –
Ich habe das gleiche Verhalten beobachtet und stimme @ Ceiling-Gecko zu, das Max-Attribut auf DefaultRolloverStrategy appredly gilt nur für den Iterator und der Iterator nur iteriert, wenn der verbleibende Dateiname wiederholt wird, daher scheint es mir nicht möglich, automatisch - Entfernen Sie alte Protokolldateien, wenn sich die Namen unterscheiden. Dennoch ist es wirklich seltsam, dass diese Funktionalität nicht existiert, wenn die API so häufig für so viele Leute verwendet wird ... –