Log4j - возможна ли такая конфигурация?

У меня есть 2 приложения - A, B. По умолчанию я хочу, чтобы все сообщения отправлялись в B. Если сообщение имеет уровень >= ERROR или, оно из регистратора com.mycomp.*, я хочу, чтобы оно переходило в A вместо.

Я пытаюсь выяснить, возможна ли эта конфигурация в log4j 1.2. Пока вроде нет.

Редактировать: чтобы уточнить, вот точно такой же вопрос о Logback logback: два приложения, несколько регистраторов, разные уровни


person ptkvsk    schedule 09.11.2015    source источник
comment
да. Вы правы, устанавливая один и тот же пакет для разных уровней ошибок/добавлений, переопределяя другой. Поэтому я бы предложил добавить приложения программно.   -  person rajuGT    schedule 10.11.2015


Ответы (1)


Можно сделать с помощью фильтра:

public class MyLogFilter extends Filter {
    @Override
    public int decide(LoggingEvent loggingEvent) {
        if (!loggingEvent.getLevel().isGreaterOrEqual(Level.ERROR) &&
                !loggingEvent.getLoggerName().startsWith("com.mycomp")) {
            return DENY;
        }

        return NEUTRAL;
    }
}

и конфигурация как

log4j.rootLogger=(INFO, A, B);
log4j.logger.com.mycomp=(INFO, A);
log4j.appenders.A.filter.a=com.mycomp.MyLogFilter;

К сожалению, фильтры можно указывать только в log4j.xml, а не в log4j.properties.

person ptkvsk    schedule 09.11.2015