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

Имам 2 добавки - A, B. По подразбиране искам всички съобщения да отиват в B. Ако съобщението има ниво >= ГРЕШКА или е от com.mycomp.* logger, искам да отива в 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