Подтвердить что ты не робот

Как предотвратить возврат журнала из собственного состояния в начале каждого журнала?

Это похоже на ошибку небрежности, но я не могу найти причину. Регистрация с помощью logback/slf4j (последняя версия slf4j-api-1.6.1, logback core/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>

Каждая установка журнала начинается с внутренних строк состояния журнала:

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]

который, согласно документам, использует формат для использования по умолчанию. Затем он заканчивает чтение конфигурации (которая настроена для вывода другого формата) и продолжается с правильно отформатированным выходом. Там параметр конфигурации <configuration debug="false">, который не влияет на это.

Кто-нибудь знает, как отключить это?

4b9b3361

Ответ 1

Если вы установите атрибут debug элемента configuration на true, вы получите всю информацию о состоянии на консоли. Если это ваша проблема, просто установите для нее значение false или удалите ее.

Если у вас возникли проблемы с конфигурацией уровня WARN или выше, вы также получите всю информацию о состоянии, зарегистрированную на консоли (включая сообщения уровня INFO). Лучшим решением этой проблемы является устранение проблемы (в вашем случае замените элемент <layout> на элемент <encoder>).

Если вы по какой-то причине не можете исправить эту проблему, но хотите удалить информацию о статусе с консоли, вместо этого вы можете настроить альтернативу StatusListener. Используйте NopStatusListener, чтобы полностью удалить информацию о статусе:

<configuration>
  <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
  <!-- etc -->
</configuration>

Ответ 2

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

Следуйте http://logback.qos.ch/codes.html#layoutInsteadOfEncoder i.e. ссылка, упомянутая в этом предупреждающем сообщении. После того, как вы выполните шаги, упомянутые в нем, то есть, если вы замените элемент <layout> на <encoder> , лог файл остановит печать сообщений на консоли.

Ответ 3

Ответ Ceki верен:

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

Как только вы это исправите, больше не будет загрязнений в первых строках вашего журнала.

По состоянию на март 2015 года в Logback 1.1.2 вам нужно использовать подкомпонент <encoder> - <layout> теперь устарел, и если он его использует, появятся сообщения об ошибках. Вы не можете контролировать это, это поведение Logback по умолчанию.

Некоторые внутренние классы также переименованы, и даже примеры на их странице руководства устарели!

Вот фрагмент кода на странице справки о кодах ошибок, в которой есть правильный способ настройки регистратора. Это полностью зафиксировало проблему в моем проекте. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>testFile.log</file>
  ...
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%msg%n</pattern>
  </encoder>
</appender>

Ответ 4

Я понял, что Стив нашел исправление, но он не упомянул об этом нить. В случае, если какой-либо другой человек попадает в ту же проблему, это исправление.

Заменить "<layout> " элементы с "<encoder> .. </encoder> " это преступник.. < layout class= "ch.qos.logback.classic.PatternLayout" >

Ответ 5

Это, по-видимому, исправлено в 0.9.29. Просто сделал несколько тестов. No Joran INFO больше. Я думаю, это является фиксацией фиксации.

Ответ 6

Я пробовал все, и ничего не работало для меня. Моя проблема связана с несколькими файлами logback.xml в моем пути к классам. Это обычный случай в мультимодульных проектах. Когда в пути к классам имеется только один файл logback.xml, нет никакой двусмысленности, и проблема решена.

Ответ 7

Борясь с одной и той же проблемой, я обнаружил, что в начале было множество строк, которые не были связаны с моим кодом. Вот как я его исправил.

<configuration debug="false">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level 
        %logger{36} - %msg%n</pattern> </encoder> -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{10} - %msg%n</pattern>
    </encoder>
</appender>

<root level="error">
    <appender-ref ref="STDOUT" />
</root>

<logger name="fun.n.games" level="DEBUG" />

Это выполняется со следующей записью в файле pom.xml

        <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>