Можем ли мы изменить уровень ведения журнала одного оператора журнала во время выполнения? - PullRequest
1 голос
/ 08 июня 2011

У меня есть следующий код:

private static final Log LOGGER = LogFactory.getLog(MyClass.class);
if (LOGGER.isErrorEnabled()) {
    LOGGER.error("ID_1: Log Message: " + parameter));
}

И я хочу, чтобы уровень серьезности был установлен на WARN или FATAL.

Если я могу обновить log4j.свойства во время выполнения, то как бы я изменил серьезность этого сообщения?Использование log4j.logger.com.foo=WARN изменит только серьезность для всего пакета.

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

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

Короткий ответ: Нет, вы не можете.

Чтобы сделать то, что вы хотите сделать, вам нужно изменить код , чтобы вызвать метод Logger, который принимает уровень какаргумент и заменить охранника;например,

if (logger.isEnabledFor(level)) {
    logger.log(level, "ID_1: Log Message: " + parameter, null);
}

И я не думаю, что это поможет, потому что тогда у вас есть проблема с получением правильного значения в этой переменной level.

Лучшей альтернативой будетсоздать регистратор с уникальным именем и использовать только в этом конкретном утверждении.Затем вы можете управлять регистрацией этого оператора (через конфигурацию регистрации) независимо от любых других операторов.

Или, более реалистично, использовать имена классов или имена пакетов для именования ваших регистраторов.Это дает вам больше детализации, чем один глобальный регистратор ... без создания безумного количества экземпляров Logger.

0 голосов
/ 08 июня 2011

Вы можете указать LogLevel при использовании Log4j и log-методов, которые принимают LogLevel в качестве параметра:

Logger l = Logger.getLogger(this.getClass());
l.log(Level.WARN, message);
l.log(Level.ERROR, message);
l.log(Level.ERROR, message, throwable);
...