Вы должны расширить класс AppenderSkeleton, который (цитируя javadoc) "предоставляет код для общей функциональности, такой как поддержка фильтрации порогов и поддержка общих фильтров."
Если вы прочитаете код AppenderSkeleton, вы увидите, что он обрабатывает почти все, оставляя вам только:
- защищенное пустое добавление (событие LoggingEvent)
- public void close ()
- public boolean requiredLayout ()
Основной метод - доп. Помните, что вам не нужно реализовывать логику фильтрации в ней, потому что она уже реализована в doAppend, который в свою очередь вызывает append.
Здесь я создал (совершенно бесполезный) класс, который хранит записи журнала в ArrayList, как демонстрацию.
public /*static*/ class MyAppender extends AppenderSkeleton {
ArrayList<LoggingEvent> eventsList = new ArrayList();
@Override
protected void append(LoggingEvent event) {
eventsList.add(event);
}
public void close() {
}
public boolean requiresLayout() {
return false;
}
}
Хорошо, давайте проверим это:
public static void main (String [] args) {
Logger l = Logger.getLogger("test");
MyAppender app = new MyAppender();
l.addAppender(app);
l.warn("first");
l.warn("second");
l.warn("third");
l.trace("fourth shouldn't be printed");
for (LoggingEvent le: app.eventsList) {
System.out.println("***" + le.getMessage());
}
}
Вы должны напечатать «первый», «второй», «третий»; четвертое сообщение не должно быть напечатано, так как уровень журнала корневого регистратора отлаживается, а уровень события трассируется Это доказывает, что AbstractSkeleton правильно реализует «управление уровнями» для нас. Так что определенно кажется, что это путь ... теперь вопрос: зачем вам специальный аппендер, в то время как есть много встроенных в этот журнал почти для любого места назначения? (кстати, хорошее место, чтобы начать с log4j: http://logging.apache.org/log4j/1.2/manual.html)