Создание пользовательского приложения Logback

Создание пользовательского приложения Logback

1. Вступление

В этой статье мы рассмотрим создание настраиваемого приложения Logback. Если вы ищете введение в ведение журнала на Java, взгляните наthis article.

Logback поставляется со многими встроенными приложениями, которые записывают в стандартный формат, файловую систему или базу данных. Красота архитектуры этого фреймворка заключается в его модульности, что означает, что мы можем легко настроить его.

В этом руководстве мы сосредоточимся наlogback-classic, для которого требуется следующая зависимость Maven:


    ch.qos.logback
    logback-classic
    1.2.3

Последняя версия этой зависимости доступна дляMaven Central.

2. Базовые приложения для входа в систему

Logback предоставляет базовые классы, которые мы можем расширить, чтобы создать собственный appender.

Appender - это общий интерфейс, который должны реализовать все приложения. Общий тип - этоILoggingEvent илиAccessEvent, в зависимости от того, используем ли мыlogback-classic илиlogback-access соответственно.

Our custom appender should extend eitherAppenderBaseorUnsynchronizedAppenderBase, w, который реализуетAppender и обрабатывает такие функции, как фильтры и сообщения о состоянии.

AppenderBase является потокобезопасным; ПодклассыUnsynchronizedAppenderBase отвечают за управление безопасностью своих потоков.

Так же, какConsoleAppender иFileAppender расширяютOutputStreamAppender и вызывают супер-методsetOutputStream(),thecustom appender should subclassOutputStreamAppenderif it is writing to anOutputStream.

3. Пользовательский Appender

В нашем собственном примере мы создадим игрушечное приложение с именемMapAppender. Это приложение вставит все события регистрации вConcurrentHashMap с меткой времени для ключа. Для начала мы создадим подклассAppenderBase и будем использоватьILoggingEvent как общий тип:

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

Затем, чтобы позволитьMapAppender начать получать события регистрации, давайте добавим его как приложение в наш файл конфигурацииlogback.xml:


    
    
        
    

4. Настройка свойств

Logback использует самоанализ JavaBeans для анализа свойств, установленных в appender. Нашему приложению понадобятся методы получения и установки, чтобы позволить интроспектору находить и устанавливать эти свойства.

Давайте добавим свойство кMapAppender, которое даетeventMap префикс для его ключа:

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

    //...

}

Затем добавьте свойство в нашу конфигурацию, чтобы установить этот префикс:



    
        test
    

    //...

5. Обработка ошибок

Для обработки ошибок во время создания и настройки нашего настраиваемого приложения мы можем использовать методы, унаследованные отAppenderBase.

Например, когда свойство префикса является нулем или пустой строкой,MapAppender может вызватьaddError() и вернуться раньше:

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

    //...

}

Когда в нашей конфигурации включен флаг отладки, мы увидим ошибку в консоли, которая предупреждает нас о том, что свойство prefix не было установлено:



    //...

6. Заключение

В этом кратком руководстве мы сконцентрировались на том, как реализовать наш собственный appender для Logback.

Как обычно, можно найти примерover on Github.