[logback] 모든 로그가 시작될 때 로그 백이 자체 상태를 출력하지 못하게하는 방법은 무엇입니까?

이것은 부주의 오류처럼 보이지만 원인을 찾을 수없는 것 같습니다. 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">이에 영향을 미치지 않는 구성 매개 변수 가 있습니다.

이것을 끄는 방법을 아는 사람이 있습니까?



답변

요소 의 debug속성 을로 설정하면 모든 상태 정보가 콘솔에 표시됩니다. 이것이 문제라면 false로 설정하거나 제거하십시오.configurationtrue

레벨 WARN이상의 구성 문제가있는 경우 모든 상태 정보 (레벨의 메시지 포함)를 콘솔에 기록합니다 INFO. 이 문제에 대한 가장 좋은 해결책은 문제를 해결하는 것입니다 (귀하의 경우 <layout>요소를 요소로 교체 <encoder>).

어떤 이유로 문제를 해결할 수 없지만 콘솔에서 상태 정보를 제거하려는 경우 다른 방법을 대신 구성 할 수 있습니다 StatusListener. 를 사용하여 NopStatusListener상태 정보를 완전히 제거하십시오.

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


답변

따라 해당 문서에 설명 된 경고 나 오류가 구성 파일의 구문 분석하는 동안 발생하는 경우, logback 자동으로 콘솔에 상태 데이터를 인쇄합니다.

http://logback.qos.ch/codes.html#layoutInsteadOfEncoder, 즉 경고 메시지에서 logback이 언급 한 링크를 따르십시오 . 여기에 언급 된 단계, 즉 <layout> 요소를 <encoder>로 바꾸면 로그 백은 콘솔에서 메시지 인쇄를 중지합니다.


답변

Ceki 답변은 정확합니다.

(…) 구성 파일을 구문 분석하는 동안 경고 또는 오류가 발생하면 로그 백은 콘솔에 자동으로 상태 데이터를 인쇄합니다.

일단 당신이 그것을 올바르게 찾으면, 더 이상 로그의 첫 줄에 오염이 없을 것입니다.

2015 년 3 월 기준 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>


답변

Steve가 수정 프로그램을 찾았다는 사실을 깨달았지만 스레드에 대해서는 언급하지 않았습니다. 다른 사람이 같은 문제를 겪는 경우 여기에 해결책이 있습니다.

대체 “<레이아웃>” 와 엘리먼트 “<인코더> .. </ 인코더>”

범인은 다음과 같습니다.
<layout class = “ch.qos.logback.classic.PatternLayout”>


답변

같은 문제로 어려움을 겪었습니다. 즉, 처음에는 코드와 관련이없는 여러 줄이 기록되었습니다. 여기에 내가 고 쳤던 방법이 있습니다.

<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>


답변

이것은 0.9.29에서 수정 된 것으로 보입니다. 방금 몇 가지 테스트를 수행했습니다. 더 이상 조란 정보가 없습니다. 이것이 고정 커밋 이라고 생각 합니다 .


답변

나는이 줄을 추가 한 것과 같은 문제가 있었다

        <!-- Stop output INFO at start -->
        <statusListener class="ch.qos.logback.core.status.NopStatusListener" />

로그 백에서 성공적으로 작동했습니다.