2014-04-09 4 views
0

У меня есть пользовательский Appender что складывает LoggingEvent S к ArrayList из LoggingEvent, следующим образом:log4j: пользовательский Appender и доступ к методу из регистратора, например

import java.util.ArrayList; 

import org.apache.log4j.AppenderSkeleton; 
import org.apache.log4j.spi.LoggingEvent; 

public class PayloadLogAppender extends AppenderSkeleton { 
    private final ArrayList<LoggingEvent> eventsList = new ArrayList(); 
    @Override 
    protected void append(LoggingEvent event) { 
     eventsList.add(event); 
    } 

    public void close() { 
    } 
    public boolean requiresLayout() { 
     return false; 
    } 
    public ArrayList<LoggingEvent> getAllMessages() { 
     return this.eventsList; 
    } 
} 

Я добавил пользовательский Appender к моему log4j. свойства, и она загружается нормально:

log4j.appender.payloadLog=PayloadLogAppender 

Теперь в моем приложении я получить доступ к регистратору обычным способом, используя getLogger(), , но в конце концов, я хотел бы иметь ухватить список событий Список. Я создал метод getAllMessages() в appender и хотел бы назвать это, когда у меня есть мой экземпляр журнала. Есть ли logger.getAllMessage() все, что необходимо, чтобы получить ссылку на eventsList?

+0

Что вы видите, когда пытаетесь logger.getAllMessages, когда используете его в конце? – bgth

+0

Я получаю это: Вызвано: java.lang.Error: Неразрешенная проблема компиляции: \t Метод getAllMessages() не определен для типа Logger –

ответ

0

Я был в состоянии получить эту работу со следующим:

import mypackage.PayloadLogAppender; 

// in the method that gets triggered at the end. 
this.LOGGER = Logger.getRootLogger(); 
Appender payloadlog = this.LOGGER.getAppender("payloadLog"); 
System.out.println("My list of logging events" + ((PayloadLogAppender) payloadlog).getAllMessage()); 

Спасибо за указателями.

Смежные вопросы