Benutzerdefinierter Logback-Appender - Dateiheader voranstellen und Rollover durchführen

8

Die Funktionalität, die ich brauche, ist Schreiben einer Kopfzeile am Anfang der konfigurierten Protokolldatei. Die Protokolldatei sollte zusätzlich basierend auf einem Zeitmuster (ich spreche Logback 1.0.7) umgerollt werden.

Ich denke also an einen Appender - obwohl ich mir nicht sicher bin, ob es ein benutzerdefiniertes Layout ist, das ich wirklich brauche.

1) Appender

In der Dokumentation zu logback ist der richtige Ansatz, AppenderSkeleton zu erweitern, aber wie würde ich das dann mit RollingFileAppender kombinieren (um den Datei-Rollover zu erstellen?)

Andererseits, wenn ich RollingFileAppender erweitere, welche Methode überschreibe ich, um nur die vorhandene Funktionalität zu dekorieren? Wie sage ich, dass diese bestimmte Zeichenfolge nur am Anfang der Datei geschrieben wird?

2) Layout

Analog dazu scheint der Ansatz LayoutBase zu erweitern und eine Implementierung für doLayout(ILoggingEvent event) bereitzustellen. Aber noch einmal, ich weiß nicht, wie ich das Verhalten einfach dekorieren soll - ich füge nur eine neue Zeile in die Datei ein, anstatt ihre Funktionalität zu stören (weil ich immer noch möchte, dass der Rest der Logs korrekt angezeigt wird).

Das getFileHeader() in LayoutBase sieht vielversprechend aus, aber wie benutze ich es? Soll es sogar von benutzerdefinierten Layouts überschrieben werden? (wahrscheinlich ja, da es Teil der Layout-Oberfläche ist, aber dann wie?)

Danke!

    
teo 08.11.2012, 18:21
quelle

2 Antworten

10

Hier beantworte ich meine eigene Frage, nur für den Fall, dass jemand anderes auf dasselbe Problem stößt. So habe ich es schließlich getan (weiß nicht, ob es der orthodoxe Weg ist):

Anstatt AppenderSkeleton zu erweitern, habe ich RollingFileAppender erweitert (um die Rollover-Funktionalität beizubehalten) und die openFile () -Methode überschrieben. Hier könnte ich die Log-Datei manipulieren und den Header darin schreiben, nachdem ich alles getan habe, was es standardmäßig tun musste. So:

%Vor%

Ich habe den Header in logback.xml so einfach konfiguriert: <header> value </header> . Dies spritzt es in das Header-Feld meines neuen Appenders.

Scheint ohne Probleme zu funktionieren, aber bitte poste, wenn du einen besseren Weg kennst!

    
teo 17.11.2012, 00:08
quelle
4

Ihre Lösung hat ein Problem: Sie löscht die erste Zeile des Protokolls jeder neuen Datei. Ich denke, das liegt daran, dass Sie den Header schreiben, während die Datei per Logback geöffnet ist. Ich habe eine andere Lösung gefunden, die dieses Problem nicht hat:

%Vor%     
Zlika 19.02.2015 20:10
quelle