Это похоже на ошибку по неосторожности, но я не могу найти причину. Ведение журнала с помощью logback / slf4j (последняя версия slf4j-api-1.6.1, ядро logback / classic 0.9.24). Простейшая конфигурация журнала для тестирования:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
<pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>
Каждая настройка журнала начинается с внутренних строк статуса logback:
11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
11:21:28,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
11:21:28,180 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [layout] on top of the object stack.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - This appender no longer admits a layout as a sub-component, set an encoder instead.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
11:21:28,207 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
11:21:28,207 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
согласно документам формат logback используется по умолчанию. Затем он завершает чтение конфигурации (которая настроена на вывод в другом формате) и продолжает вывод в правильно отформатированном виде. Там есть параметр конфигурации, <configuration debug="false">
который не влияет на это.
Кто-нибудь знает, как это отключить?
Ответы:
Если вы установите
debug
атрибутconfiguration
элемента наtrue
, вы получите всю информацию о состоянии на консоль. Если это ваша проблема, просто установите значение false или удалите его.Если у вас есть какие-либо проблемы с настройкой уровня
WARN
или выше, вы также получите всю информацию о состоянии, занесенную в консоль (включая сообщения уровняINFO
). Лучшее решение этой проблемы - исправить проблему (в вашем случае замените<layout>
элемент на<encoder>
элемент).Если вы по какой-то причине не можете решить проблему, но хотите удалить информацию о состоянии из консоли, вы можете вместо этого настроить альтернативу
StatusListener
. ИспользуйтеNopStatusListener
для полного удаления информации о статусе:источник
INFO
сообщения журнала тоже исчезнут, но на самом деле они делают. Я знаю, что ответ говорит об этом, но по какой-то причине мне это было непонятно. Для ясности: исправьте проблему с кодировщиком / компоновкой, и не только исчезнут предупреждающие сообщения, но и исчезнут информационные сообщения, даже если они не связаны с проблемой.Как описано в документации , если во время синтаксического анализа файла конфигурации возникают предупреждения или ошибки, logback автоматически распечатывает данные о состоянии на консоли.
Следуйте http://logback.qos.ch/codes.html#layoutInsteadOfEncoder т.е. ссылку упоминаемый Logback в предупреждающее сообщение. После того, как вы выполните указанные шаги, то есть, если вы замените элемент <layout> на <encoder>, logback остановит печать сообщений на консоли.
источник
debug="true"
атрибут вconfiguration
элементеlogback.xml
. Пожалуйста, укажите это на благо других людей, которые попадают в эту дыру!Ceki ответ правильный:
Как только вы все сделаете правильно, в первых строках вашего журнала больше не будет загрязнения.
По состоянию на март 2015 года в Logback 1.1.2 вам необходимо использовать
<encoder>
подкомпонент -<layout>
теперь он устарел и, если его использовать, будут появляться сообщения об ошибках. Вы не можете контролировать это, это поведение Logback по умолчанию.Некоторые внутренние классы тоже были переименованы, и даже примеры на их странице руководства устарели!
Вот фрагмент кода на странице справки по коду ошибок , в котором указан правильный способ настройки регистратора. Это решило проблему полностью в моем проекте. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
источник
Я понял, что Стив нашел исправление, но он не упомянул об этом в теме. В случае, если любой другой человек столкнулся с той же проблемой, здесь есть решение.
Замените элементы "<layout>" на "<encoder> .. </ encoder>"
Преступник: <layout class = "ch.qos.logback.classic.PatternLayout">
источник
Сам боролся с той же проблемой, то есть в самом начале было несколько строк, которые не были связаны с моим кодом. Вот как я это исправил.
Это выполняется со следующей записью в файле pom.xml.
источник
Кажется, это исправлено в 0.9.29. Просто сделал несколько тестов. Нет больше информации о Джоране. Я предполагаю, что это фиксационный коммит.
источник
У меня была такая же проблема, я добавил эту строку
в logback, и это успешно работает
источник
Я перепробовал все, и у меня ничего не получалось. Моя проблема была из-за нескольких файлов logback.xml в моем classpath. Это распространенный случай в мультимодульных проектах. Когда в classpath есть только один файл logback.xml, двусмысленность отсутствует, и проблема решена.
источник
Используя
logback.groovy
:statusListener(NopStatusListener)
(вsrc/test/resources/logback.groovy
) работает.(Допустимый вариант использования, например, если вы работаете с ANT в Eclipse, используете ведение журнала обратной связи, классы groovy и модульные тесты, где берутся модульные тесты
src/test/resources/logback.groovy
, но также увидятsrc/main/resources/logback.groovy
(или подобное), которое вы не можете исключить (если говорят , что путь к классу ANT используется проекты classpath).)источник
Я предпочитаю использовать прослушиватель статуса для отключения собственных журналов регистрации:
Но, как уже упоминалось, NopStatusListener также предотвращает отображение предупреждений и ошибок. Таким образом, вы можете написать свой пользовательский слушатель статуса и вручную изменить уровень журнала:
Затем используйте его в файле logback.xml:
источник