Wie rolle ich die Protokolldatei beim Start im Logback-Modus hoch
Ich konfigurieren möchte, logback das folgende zu tun.
- Log in eine Datei
- Rollen Sie die Datei, wenn es erreicht 50MB
- Halten nur 7 Tage im Wert von logs
- Beim Start erzeugen immer eine neue Datei (machen Sie eine roll -)
Ich habe Sie alle arbeiten, außer für das Letzte Element, Start Rollen. Weiß jemand, wie man das erreichen? Hier ist die config...
<appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg \(%file:%line\)%n</Pattern>
</layout>
<File>server.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>server.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- keep 7 days' worth of history -->
<MaxHistory>7</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>50MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
InformationsquelleAutor der Frage Mike Q | 2010-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keiner der anderen Vorschläge wurde für meine situation. Ich habe nicht verwenden möchten, eine Größe-und Zeit-basierte Lösung, da es erfordert die Konfiguration eines "MaxFileSize", und wir sind mit einer streng time-based policy. Hier ist, wie ich erreicht, rollt die Datei beim Start mit einem TimeBasedRollingPolicy:
Der trick ist, um die nextCheck Zeit, 0L, so dass isTriggeringEvent() denke, es ist Zeit zu Rollen Sie die log-Datei über. Es wird somit die Ausführung von code zur Berechnung der mit dem Namen, sowie bequem zurücksetzen der nextCheck Zeit Wert. Der nachfolgende Aufruf rollover() bewirkt, dass die log-Datei, um gerollt werden. Da passiert das nur beim Start, ist es eine optimalere Lösung, als diejenigen, die Durchführung eines Vergleichs innerhalb isTriggerEvent(). Aber kleine, Vergleich, noch wird die Leistung verringert, leicht ausgeführt, wenn Sie auf jede log-Meldung. Dies zwingt auch die rollover auftreten, sofort beim Start, anstatt zu warten, für den ersten log-event.
@NoAutoStart Anmerkung ist wichtig, um zu verhindern, dass Joran aus ausführen, wird die start () - Methode vor allen anderen die Initialisierung abgeschlossen ist. Ansonsten bekommst du eine NullPointerException.
Hier ist die config:
Hoffe, das hilft!
InformationsquelleAutor der Antwort Dave
Es für mich funktioniert, verwenden Sie die folgende Klasse als timeBasedFileNamingAndTriggeringpolicy :
InformationsquelleAutor der Antwort proactif
Fand ich eine andere Lösung für das Rollen der logFile einmal, wenn die Anwendung gestartet wird.
Nutze ich logback ist
RollingFileAppender
mit logback istFixedWindowRollingPolicy
und meine eigene Umsetzung einesTriggeringPolicy<E>
.Den
FixedWindowRollingPolicy
bekommt die fileNamePattern für die neue logFile, wo%1
ist die neue Nummer der Datei. Die maxIndex steht für die maximale Anzahl meiner "Geschichte". Weitere Informationen: FixedWindowRollingPolicyMein Implementierungen
TriggeringPolicy
gibt true zurück, für die ersten Zeit, wenn isTriggeringEvent(...) aufgerufen wird. Also die WindowRollingPolicy rollt über die logfiles, wenn die Politik aufgerufen wird, das erste mal, und danach wird es keine Rolle mehr wieder.Der xml-Konfiguration für die
RollingFileAppender
:Den
TriggeringPolicy
:InformationsquelleAutor der Antwort duffy356
Für eine Lösung mit bereits vorhandenen Komponenten der logback schlägt vor, die eindeutig benannte Dateien: http://logback.qos.ch/manual/appenders.html#uniquelyNamed
AKTUALISIERT für logback-1.2.1
InformationsquelleAutor der Antwort raisercostin
Überschreiben der isTriggeringEvent () - Methode in ch.qos.logback.core.ins Rollen.SizeAndTimeBasedFNATP sollte gut funktionieren. Nur Rückgabe von 'true' das erste mal isTriggeringEvent () - Methode aufgerufen wird.
InformationsquelleAutor der Antwort Ceki
Ceki, der die Lösung scheint nicht zu funktionieren für mich, aber scheint zu sein, einen Teil des Weges gibt es mindestens.
Er bläst, weil Sie es nicht sehen können, die rolling-Richtlinie beim starten des
TimeBasedFileNamingAndTriggeringPolicyBase
. Mit einigen Hack ich habe es zu tun, einige Protokollierung, und mit einigen mehr habe ich es zu beobachten, den Auslöser, aber dann brach es wieder, denn es konnte nicht beheben, eine der mit dem Namen Eigenschaften... Das Paket ist ein logback so konnte ich auf einige Interna, zu replizieren einige der Logik inSizeAndTimeBasedFNATP#isTriggeringEvent
- und call -computeCurrentPeriodsHighestCounterValue
. Ich denke, etwas in diese Richtung funktionieren könnte, nur noch nicht gefunden die Magische Kombination noch. Ich hoffe wirklich, ich Tue etwas albern, weil ich sonst denke, es wird bedeuten, entweder öffnen Sie die details für Unterklassen, oder setzen diese direkt in logback als andere Rollen/Auslösung Politik.logback.xml: habe versucht, verschiedene Ordnungen von
triggeringPolicy
,TimeBasedFileNamingAndTriggeringPolicy
innerhalb und außerhalb derrollingPolicy
.Den trigger-Politik:
Ausnahme:
InformationsquelleAutor der Antwort Joe Kearney
Erstellen Sie Ihre eigene Unterklasse von
ch.qos.logback.core.rolling.TimeBasedRollingPolicy
und überschreiben Sie diestart
InformationsquelleAutor der Antwort Alexander Pogrebnyak
Habe ich die folgenden arbeiten (Kombination von Ideen aus den vorherigen Antworten). Hinweis: ich war den Umgang mit Größe-basierte Dateien, die nicht Zeit -, aber ich vermute, dass die gleiche Lösung funktioniert.
}
InformationsquelleAutor der Antwort djechlin
Diese Lösung wirklich funktioniert, vielen Dank.
Allerdings gibt es eine ärgerliche Panne: wenn Sie das Programm zum ersten mal Zeit, das Logbuch ist gerollt, nachdem es erstellt wird, wenn es leer ist oder fast leer ist.
Also ich schlage vor, ein Update: überprüfen Sie, ob der log-Datei existiert und nicht leer ist an der Zeit die Methode aufgerufen wird.
Auch, eine mehr kosmetische Korrektur: umbenennen der "gestartet" - variable, weil es versteckt die geerbten member mit demselben Namen.
Auch, ich glaube, es funktioniert einwandfrei mit logback version 1.1.4-SNAPSHOT (ich habe den source und kompiliert es selbst), aber es hat nicht ganz funktioniert mit Version 1.1.3. Mit 1.1.3, Namen der Dateien korrekt mit den spezifizierten Zeit-zone, aber rollover passiert immer noch im default-Zeitzone Mitternacht.
InformationsquelleAutor der Antwort Leonid Ilyevsky
Ich schließlich heraus. Ich kann Rollen von Größe, Zeit-und start-up. Hier ist die Lösung:
1. erstellen Sie eine eigene Klasse
2. konfigurieren logback
InformationsquelleAutor der Antwort Perlos
Die API geändert hat (zum Beispiel setMaxFileSize nicht mehr vorhanden), und eine Menge von dem Zeug oben scheint nicht zu funktionieren, aber ich habe etwas, das funktioniert für mich gegen logback 1.1.8 (die neueste).
Wollte ich roll auf Start und Rollen auf die Größe, aber nicht die Zeit. Dies gilt es:
Mit dieser müssen Sie auch ein rolling-Politik. FixedWindowRollingPolicy würde wahrscheinlich tun, aber ich mag es nicht, weil ich will, dass eine große Anzahl von Dateien, und es ist sehr ineffizient. Etwas, dass die zahlen schrittweise (statt Schiebe, wie FixedWindow) funktionieren würde, aber das gibt es nicht. Solange Schreibe ich meine eigenen habe ich beschlossen, Zeit zu nutzen, statt zu zählen. Ich wollte erweitern Sie aktuelle logback-code, aber für die Zeit-basierte Sachen, die Rollen-und Trigger-Richtlinien werden oft kombiniert, in einer Klasse, und es gibt Protokolle von NIST-und kreisförmigen Zeug und Felder ohne Getter, so fand ich, dass eher unmöglich. Also musste ich eine Menge tun, um von Grund auf neu. Ich halten Sie es einfach und hat nicht implementieren features wie Komprimierung - ich würde lieben, Sie zu haben, aber ich versuche nur, um keep it simple.
Und dann die config sieht aus wie
wenn Sie frustriert sind, diese nicht gelöst ist nativ, für ihn Stimmen in
http://jira.qos.ch/browse/LOGBACK-204
http://jira.qos.ch/browse/LOGBACK-215
(es ist schon Jahre, und mir ist absolut wichtig, Funktionalität, obwohl ich weiß, dass viele andere frameworks Versagen in es auch)
InformationsquelleAutor der Antwort dlipofsky