Création d’un générateur de journal personnalisé

Création d'un Appender Logback personnalisé

1. introduction

Dans cet article, nous allons explorer la création d'un appender Logback personnalisé. Si vous cherchez une introduction à la journalisation en Java, veuillez jeter un œil àthis article.

Logback est livré avec de nombreux appenders intégrés qui écrivent dans une sortie standard, un système de fichiers ou une base de données. La beauté de l’architecture de ce framework réside dans sa modularité, ce qui nous permet de le personnaliser facilement.

Dans ce didacticiel, nous allons nous concentrer surlogback-classic, qui nécessite la dépendance Maven suivante:


    ch.qos.logback
    logback-classic
    1.2.3

La dernière version de cette dépendance est disponible surMaven Central.

2. Appenders de base de Logback

Logback fournit des classes de base que nous pouvons étendre pour créer un appender personnalisé.

Appender est l'interface générique que tous les ajouteurs doivent implémenter. Le type générique est soitILoggingEvent soitAccessEvent, selon que nous utilisons respectivementlogback-classic oulogback-access.

Our custom appender should extend eitherAppenderBaseorUnsynchronizedAppenderBase, qui implémentent à la foisAppender et gèrent des fonctions telles que les filtres et les messages d'état.

AppenderBase est thread-safe; Les sous-classesUnsynchronizedAppenderBase sont responsables de la gestion de la sécurité des threads.

Tout comme lesConsoleAppender et lesFileAppender étendent tous les deuxOutputStreamAppender et appellent la super méthodesetOutputStream(),thecustom appender should subclassOutputStreamAppenderif it is writing to anOutputStream.

3. Appender personnalisé

Pour notre exemple personnalisé, nous allons créer un appendeur de jouet nomméMapAppender. Cet appender insérera tous les événements de journalisation dans unConcurrentHashMap, avec l'horodatage de la clé. Pour commencer, nous sous-classeronsAppenderBase et utiliseronsILoggingEvent comme type générique:

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;
    }
}

Ensuite, pour permettre auMapAppender de commencer à recevoir des événements de journalisation, ajoutons-le en tant qu'appendeur dans notre fichier de configurationlogback.xml:


    
    
        
    

4. Définition des propriétés

Logback utilise l'introspection JavaBeans pour analyser les propriétés définies sur l'appender. Notre appender personnalisé aura besoin de méthodes getter et setter pour permettre à l'introspecteur de trouver et de définir ces propriétés.

Ajoutons une propriété àMapAppender qui donne aueventMap un préfixe pour sa clé:

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;
    }

    //...

}

Ensuite, ajoutez une propriété à notre configuration pour définir ce préfixe:



    
        test
    

    //...

5. La gestion des erreurs

Pour gérer les erreurs lors de la création et de la configuration de notre appender personnalisé, nous pouvons utiliser des méthodes héritées deAppenderBase.

Par exemple, lorsque la propriété prefix est une chaîne nulle ou vide, lesMapAppender peuvent appeleraddError() et retourner tôt:

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);
    }

    //...

}

Lorsque l'indicateur de débogage est activé dans notre configuration, nous verrons une erreur dans la console qui nous avertit que la propriété de préfixe n'a pas été définie:



    //...

6. Conclusion

Dans ce rapide didacticiel, nous nous sommes concentrés sur la manière de mettre en œuvre notre appender personnalisé pour Logback.

Comme d'habitude, l'exemple peut être trouvéover on Github.