Как заставить ThresholdFilter работать в logback - программирование
Подтвердить что ты не робот

Как заставить ThresholdFilter работать в logback

В основном я следил за инструкцией в главе 7 официальной документации по регистрации. К сожалению, все не работает должным образом, и я не могу понять, почему. Итак, мы здесь.

То, что я хочу достичь, - это регистрировать только информацию и выше в консоли и все отладки и выше в файлы журналов. У меня эти строки в моем logback.groovy:

appender("CONSOLE", ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        pattern = "%d{YYYY-MM-dd/HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
    }
    filter(ThresholdFilter) {
        level = INFO
    }
}

logger("vh.FileIO", DEBUG, ['CONSOLE','FILE-DEBUG'])
root(DEBUG, ['CONSOLE'])

Я думал, что ThresholdFilter сделает CONSOLE только запись информации и выше. Тем не менее, я все еще получаю журналы отладки vh.FileIO на CONSOLE. Например, я все еще получаю что-то вроде этого на консоли:

2013-10-11/21:48:10.537 [main] DEBUG vh.FileIO - Combining all records into file ./output/sip_sample_data_output.csv

Итак, что мне здесь не хватает?

Обновление

После воспроизведения с конфигурацией logback я обнаружил, что ThresholdFilter работает так, как ожидается, если я использую файл конфигурации XML. Тем не менее, мне все же хотелось бы знать, почему он не работает в конфигурационном файле groovy.

4b9b3361

Ответ 1

Решение проблемы заключается в следующем: просто добавьте импорт класса ThresholdProvider в начале "logback.groovy":

import ch.qos.logback.classic.filter.ThresholdFilter

то он работает так, как ожидалось.

Я попробовал предоставленный "logback.groovy" в простом проекте. Еще одна проблема: сообщения записываются дважды на консоль. Я думаю, что это может быть исправлено путем тонкой настройки "регистратора" и "корневых" вызовов.