2013-09-16 2 views
35

나는 행복하게 Logback과 함께 SLF4J를 사용하고 ROOT logger에 대해 2 개의 추가자를 사용합니다.Logback으로 2 개의 다른 ROOT 로거를 만드는 방법은 무엇입니까?

<root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="FILE" /> 
</root> 

우리는 어떻게 모두 펜더에 대해 서로 다른 로그 수준을 가질 수있다? 아직 모든 ROOT-logger 메시지가 필요합니다. FILE

출력의 일부가 될 수있는 모든 로그의 필요성에 대한 STDOUT

  • 정보 - 레벨에 대한

    • DEBUG - 레벨 (그래서 루트 로거 필요).

      모든 도움을 주시면 감사하겠습니다. 감사.

  • 답변

    44

    루트 로거가 두 개 이상인 것은 아니기 때문에 질문에 약간의 혼란이있을 수 있습니다. 당신이 찾고있는 것은 appender가 기록하는 어떤 이벤트를 미세 조정하는 방법입니다.

    그리고 그것을위한

    , 당신은 펜더의 각각에 ThresholdFilter을 추가

    http://logback.qos.ch/manual/filters.html#thresholdFilter

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
        <level>INFO</level> 
    </filter> 
    

    구성 수준의 정보를 STDOUT에 대한 FILE - 펜더와 DEBUG를 위해.

    편집 :이 답변이 틀렸다는 다른 답변에 대해 이의를 제기해야합니다. 예, 구성에 두 개 이상의 루트 요소을 사용할 수 있습니다. 그것은 하나 이상의 루트를 만들지는 않습니다. 로거하지만 질문 제목에서 묻습니다. 또한, logback 수동 상태 http://logback.qos.ch/manual/configuration.html#syntax (강조 광산) 미만 :

    그럼에도 불구하고, 구성 파일의 가장 기본적인 구조는 0 이상의 < 펜더> 엘리먼트 뒤에 < 구성> 요소로서 기술 될 수있다 그 다음에 0 이상 < logger> 요소, 이 이어지고 다음으로 많고 하나는 < root> 요소가옵니다.

    매우 효과적 일 수 있지만 적어도 규칙에 위배됩니다.

    +0

    내가 가진'<로거 이름 = "ch.qos"레벨 = "OFF"/>'아직 구성된 두 appender 모두에 로그인하고 있습니다. 어떻게 가능합니까? – piechuckerr

    +0

    나는 그 누구도 당신만큼 작은 정보로 도울 수 있을지 의심 스럽다. 해결할 문제가있는 경우 새 질문을 열어주세요. 의견은 여기에 해당하지 않습니다. – sheltem

    +0

    작동하는 것처럼 보이지만 설명서뿐만 아니라 코드에서 단 하나의 루트 로거 만 지원하므로 루트 로거의 일부 기능이 누락되었다고 생각됩니다. 예 : 2 개의 루트 로거를 선언하고 하나의 레벨이 다른 경우, 기본 레벨은 무엇입니까? [소스 코드] (https://github.com/qos-ch/logback/blob/master/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java)가 생성자에서 _single_ 루트 로거를 초기화합니다. – Rhubarb

    6

    이전의 대답은 잘못입니다 : 당신은 내가 logback 함께 일하고 있어요 여러 root 요소, 관련 기록 level 각과 appender-ref을 (할 수 있습니다.버전>1.0.13) 당신도 그런 식으로, 당신의 펜더 내부에 필터를 넣어 가지고이 경우 :

    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> 
        <resetJUL>true</resetJUL> 
    </contextListener> 
    
    <!-- To enable JMX Management --> 
    <jmxConfigurator/> 
    
    <appender name="console-info" class="ch.qos.logback.core.ConsoleAppender"> 
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
        <level>INFO</level> 
        <onMatch>ACCEPT</onMatch> 
        <onMismatch>DENY</onMismatch> 
        </filter> 
        <encoder> 
         <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> 
        </encoder> 
    </appender> 
    
    <appender name="console-debug" class="ch.qos.logback.core.ConsoleAppender"> 
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
        <level>DEBUG</level> 
        <onMatch>ACCEPT</onMatch> 
        <onMismatch>DENY</onMismatch> 
        </filter> 
        <encoder> 
         <pattern>[%d{ddMMMyyyy HH:mm:ss.SS}]%-5level %logger{45} - %msg %n</pattern> 
        </encoder> 
    </appender> 
    
    
    <root level="info"> 
        <appender-ref ref="console-info"/> 
    </root> 
    <root level="debug"> 
        <appender-ref ref="console-debug"/> 
    </root> 
    

    +7

    글을 참고하세요 : http://logback.qos.ch/manual/configuration. html # 구문 .. "최대 하나 요소" –

    +1

    구성이 잘못되었습니다. 당신의'console-debug'는 단지'debug' 레벨 ('warn'이 아님) 만 로그하고 비슷하게'console-info'는'info' 레벨 만 기록합니다. –

    +0

    이중 루트 정의로 appender가 누적됩니까? 수동 "정보"에 따르면 "경고"및 "오류"수준의 메시지가 두 로그에 모두 들어갈 것이라고 생각합니다 (필터가 appender로 설정되지 않은 것으로 가정). 내가 맞습니까? –

    관련 문제