Criando um Appender de Logback Personalizado

Criando um Appender de Logback Personalizado

1. Introdução

Neste artigo, exploraremos a criação de um appender Logback personalizado. Se você está procurando uma introdução ao registro em Java, dê uma olhada emthis article.

O Logback é fornecido com muitos anexos internos que gravam em saída padrão, sistema de arquivos ou banco de dados. A beleza da arquitetura dessa estrutura é sua modularidade, o que significa que podemos personalizá-la facilmente.

Neste tutorial, vamos nos concentrar emlogback-classic, que requer a seguinte dependência Maven:


    ch.qos.logback
    logback-classic
    1.2.3

A versão mais recente desta dependência está disponível emMaven Central.

2. Appenders de Logback de Base

O Logback fornece classes base que podemos estender para criar um aplicativo personalizado.

Appender é a interface genérica que todos os anexadores devem implementar. O tipo genérico éILoggingEvent ouAccessEvent, dependendo se estamos usandologback-classic oulogback-access, respectivamente.

Our custom appender should extend eitherAppenderBaseorUnsynchronizedAppenderBase, que implementaAppendere controla funções como filtros e mensagens de status.

AppenderBase é seguro para threads; As subclasses deUnsynchronizedAppenderBase são responsáveis ​​por gerenciar sua segurança de thread.

Assim comoConsoleAppender eFileAppender estendemOutputStreamAppender e chamam o super métodosetOutputStream(),thecustom appender should subclassOutputStreamAppenderif it is writing to anOutputStream.

3. Appender personalizado

Para nosso exemplo personalizado, criaremos um anexador de brinquedo denominadoMapAppender. Este anexador irá inserir todos os eventos de registro em umConcurrentHashMap, com o carimbo de data / hora para a chave. Para começar, vamos criar uma subclasse deAppenderBasee usarILoggingEvent como o tipo genérico:

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

A seguir, para permitir queMapAppender comece a receber eventos de registro, vamos adicioná-lo como um appender em nosso arquivo de configuraçãologback.xml:


    
    
        
    

4. Propriedades de configuração

O logback usa a introspecção do JavaBeans para analisar as propriedades definidas no appender. Nosso appender personalizado precisará de métodos getter e setter para permitir que o introspector encontre e defina essas propriedades.

Vamos adicionar uma propriedade aMapAppender que forneça aeventMap um prefixo para sua chave:

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

    //...

}

Em seguida, adicione uma propriedade à nossa configuração para definir este prefixo:



    
        test
    

    //...

5. Manipulação de erros

Para lidar com erros durante a criação e configuração de nosso anexador personalizado, podemos usar métodos herdados deAppenderBase.

Por exemplo, quando a propriedade prefix é uma string nula ou vazia,MapAppender pode chamaraddError()e retornar mais cedo:

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

    //...

}

Quando o sinalizador de depuração é ativado em nossa configuração, veremos um erro no console que nos alerta de que a propriedade prefix não foi definida:



    //...

6. Conclusão

Neste tutorial rápido, focamos em como implementar nosso aplicativo personalizado para Logback.

Como de costume, o exemplo pode ser encontradoover on Github.