Как заставить 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.
Ответы
Ответ 1
Решение проблемы заключается в следующем: просто добавьте импорт класса ThresholdProvider в начале "logback.groovy":
import ch.qos.logback.classic.filter.ThresholdFilter
то он работает так, как ожидалось.
Я попробовал предоставленный "logback.groovy" в простом проекте. Еще одна проблема: сообщения записываются дважды на консоль. Я думаю, что это может быть исправлено путем тонкой настройки "регистратора" и "корневых" вызовов.