Независимая настройка двух приложений logback

Я мог бы спросить что-то тривиальное, но то, что я пробовал, похоже, не работает. С моим приложением MAIN я хочу регистрировать всю информацию везде, кроме стороннего пакета (назовем его boring), который выдает их слишком много (поэтому я смотрю только на предупреждения). Кроме того, я хочу регистрировать отладки в своем пакете interesting. Это отлично работает со следующими logback.groovy:

root(INFO, ["MAIN"])
logger("interesting", DEBUG, ["MAIN"])
logger("boring", WARN, ["MAIN"])

Теперь я хочу настроить другое приложение для ведения журнала на один уровень больше, чем

root(DEBUG, ["DETAIL"])
logger("interesting", TRACE, ["DETAIL"])
logger("boring", INFO, ["DETAIL"])

Это тоже работает, но когда я соединяю оба, это не так. Я могу представить, что это вызвано тем фактом, что каждый Logger либо включен, либо выключен для данного уровня. Я знаю, что для того поведения, которое я хочу, регистраторы в скучном пакете должны быть на уровне INFO (из-за приложения DETAIL) и что сообщения для приложения MAIN должны быть отфильтрованы, но я не вижу, как чтобы настроить это.

ОБНОВИТЬ

Я вижу, что почти все делал неправильно. Линия

logger("interesting", DEBUG, ["MAIN"])

ничего не говорит, например, установить уровень DEBUG для приложения MAIN и пакета interesting и ниже), вместо этого он делает две независимые вещи:

  • установите уровень DEBUG для пакета interesting и ниже
  • добавить ГЛАВНЫЙ аппендикс к интересному Logger

person maaartinus    schedule 10.06.2014    source источник


Ответы (1)


Это кажется невозможным без написания собственного фильтра, что, к счастью, довольно просто. Я закончил с чем-то вроде

root(DEBUG, ["DETAIL", "MAIN"])
// settings for the most detailed appender
logger("interesting", TRACE)
logger("boring", INFO)

appender("MAIN", ...) {
    ...
    filter = new MyFilter()
        .deny("boring", INFO)
        .accept("interesting", DEBUG)
        .deny("", DEBUG)
}

где deny и accept — мои методы добавления записей в MyFilter. Записи оцениваются последовательно, т.е.

  • в пакете boring и ниже запрещается все с уровнем INFO и ниже
  • в пакете interesting и ниже принимается все с уровнем DEBUG и выше
  • в противном случае в любом пакете все с уровнем DEBUG и выше получает отказ

Вдохновленный этим вопросом.

person maaartinus    schedule 14.06.2014