Erstellen eines benutzerdefinierten Logback-Appenders

Erstellen eines benutzerdefinierten Logback-Appenders

1. Einführung

In diesem Artikel wird das Erstellen eines benutzerdefinierten Logback-Appenders erläutert. Wenn Sie nach einer Einführung in die Anmeldung in Java suchen, schauen Sie sich bittethis article an.

Logback wird mit vielen integrierten Appendern ausgeliefert, die in Standard-Out, Dateisystem oder Datenbank schreiben. Das Schöne an der Architektur dieses Frameworks ist seine Modularität, sodass wir es leicht anpassen können.

In diesem Tutorial konzentrieren wir uns auflogback-classic, für die die folgende Maven-Abhängigkeit erforderlich ist:


    ch.qos.logback
    logback-classic
    1.2.3

Die neueste Version dieser Abhängigkeit ist fürMaven Central verfügbar.

2. Base Logback Appenders

Logback bietet Basisklassen, die wir erweitern können, um einen benutzerdefinierten Appender zu erstellen.

Appender ist die generische Schnittstelle, die alle Appender implementieren müssen. Der generische Typ ist entwederILoggingEvent oderAccessEvent, je nachdem, ob wirlogback-classic oderlogback-access verwenden.

Our custom appender should extend eitherAppenderBaseorUnsynchronizedAppenderBase, , die sowohlAppender implementieren als auch Funktionen wie Filter und Statusmeldungen verarbeiten.

AppenderBase ist threadsicher; Die Unterklassen vonUnsynchronizedAppenderBaseind für die Verwaltung ihrer Thread-Sicherheit verantwortlich.

So wie sowohlConsoleAppender als auchFileAppenderOutputStreamAppender erweitern und die SupermethodesetOutputStream() aufrufen,thecustom appender should subclassOutputStreamAppenderif it is writing to anOutputStream.

3. Benutzerdefinierter Appender

In unserem benutzerdefinierten Beispiel erstellen wir einen Spielzeug-Appender mit dem NamenMapAppender. Dieser Appender fügt alle Protokollierungsereignisse inConcurrentHashMap mit dem Zeitstempel für den Schlüssel ein. Zu Beginn werden wirAppenderBase unterordnen undILoggingEvent als generischen Typ verwenden:

public class MapAppender extends AppenderBase {

    private ConcurrentMap eventMap
      = new ConcurrentHashMap<>();

    @Override
    protected void append(ILoggingEvent event) {
        eventMap.put(System.currentTimeMillis(), event);
    }

    public Map getEventMap() {
        return eventMap;
    }
}

DamitMapAppender Protokollierungsereignisse empfangen kann, fügen wir es als Anhang in unsere Konfigurationsdateilogback.xml ein:


    
    
        
    

4. Eigenschaften einstellen

Logback verwendet JavaBeans Introspection, um die auf dem Appender festgelegten Eigenschaften zu analysieren. Unser benutzerdefinierter Appender benötigt Get- und Setter-Methoden, damit der Introspector diese Eigenschaften finden und festlegen kann.

Fügen wirMapAppender eine Eigenschaft hinzu, dieeventMap ein Präfix für ihren Schlüssel gibt:

public class MapAppender extends AppenderBase {

    //...

    private String prefix;

    @Override
    protected void append(ILoggingEvent event) {
        eventMap.put(prefix + System.currentTimeMillis(), event);
    }

    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

    //...

}

Fügen Sie als Nächstes unserer Konfiguration eine Eigenschaft hinzu, um dieses Präfix festzulegen:



    
        test
    

    //...

5. Fehlerbehandlung

Um Fehler beim Erstellen und Konfigurieren unseres benutzerdefinierten Appenders zu behandeln, können wir Methoden verwenden, die vonAppenderBase geerbt wurden.

Wenn die Präfix-Eigenschaft beispielsweise eine Null oder eine leere Zeichenfolge ist, können dieMapAppenderaddError() aufrufen und frühzeitig zurückkehren:

public class MapAppender extends AppenderBase {

    //...

    @Override
    protected void append(final ILoggingEvent event) {
        if (prefix == null || "".equals(prefix)) {
            addError("Prefix is not set for MapAppender.");
            return;
        }

        eventMap.put(prefix + System.currentTimeMillis(), event);
    }

    //...

}

Wenn das Debug-Flag in unserer Konfiguration aktiviert ist, wird in der Konsole ein Fehler angezeigt, der uns darauf hinweist, dass die Präfix-Eigenschaft nicht festgelegt wurde:



    //...

6. Fazit

In diesem kurzen Tutorial haben wir uns auf die Implementierung unseres benutzerdefinierten Appenders für Logback konzentriert.

Wie üblich kann das Beispielover on Github gefunden werden.