Захват сообщений журнала в модульных тестах с использованием TestNG (Log4j2) - PullRequest
0 голосов
/ 01 июня 2019

Я создал CaptureLogger, который расширяет AbstractLogger.У меня есть код в этом классе, который, когда происходит событие журналирования, захватывает сообщение и сохраняет его в массиве строк.

Однако я не могу подключить этот CaptureLogger к регистратору для класса, который яЯ тестирую.Я попытался сделать

CaptureLogger customLogger = (CaptureLogger) LogManager.getLogger(ClassUnderTest.class);

Где ClassUnderTest - это класс, который я пытаюсь проверить.

Мы используем Lombok Log4j2 для создания и создания нашего логина в коде, поэтому мне нужно остановиться на том, что будет хорошо работать с Lombok.

Кроме того, я использую TestNG в качестве моей инфраструктуры тестирования.

Может ли кто-нибудь предоставить мне указатель или образцы кода для этого?

Спасибо,

Mark

Редактировать

Этофрагмент моего класса CaptureLogger:

public class CaptureLogger extends AbstractLogger {

    private List<Object> loggedMessages;
    public static Level messageLevel = Level.DEBUG;
    private static final long serialVersionUID = 1l; //one-ell

    public CaptureLogger(final String name) {
        super(name);
        loggedMessages = new ArrayList<>();
    }

    public List<Object> getLoggedMessages(){ return loggedMessages;}

    public void setLogLevel(final Level level){
        messageLevel = level;
    }

    @Override
    public boolean isEnabled(Level level) {
        return true;
    }

    @Override
    public void log(Level level, Object message){
        loggedMessages.add(message);
    }

    @Override
    public void log(final Level level, final Supplier<?> msgSupplier) {
        log(level, msgSupplier.get());
    }

    @Override
    public boolean isEnabled(Level level, Marker marker, Message message, Throwable t) {
        return level == messageLevel;
    }
...