Создание пользовательского приложения 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.