2013-04-02 2 views
3

Play 2.1 (Java) 및 Play와 함께 제공되는 기본 로그백 (1.0.7) 로거를 사용하고 있습니다. 내 컨트롤러 중 하나에서 "play.Logger"를 사용하여 디버그 로그 메시지를 인쇄하고 있습니다. logger.xml에 "%class"이 언급되어 있지만 발신자 클래스 이름이 인쇄되지 않습니다. "play.Logger$ALogger"이 인쇄됩니다. logback의 ch.qos.logback.classic.spi.CallerData까지 호출자 클래스를 식별하는 배열로 stacktrace를 반환 할 때까지 디버깅했습니다. 배열에서 내 호출자 컨트롤러 클래스는 배열의 맨 아래에있는 반면 "play.Logger.ALogger"항목은 "ch.qos.logback.classic.pattern.ClassOfCallerConverter"에서 name(cda[0].getClassName()) 클래스를 인쇄하는 데 사용됩니다.PlayFramework 로그백 인쇄 호출자 클래스 이름

다른 유사한 스레드 herehere을 보았지만 해결하지 못했습니다.

은 여기 내 XML 내가 모르는 뭔가가

<appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${application.home}/logs/debug_log.log</file> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%date - [%level] - from %logger %class in %thread %n%message%n%xException%n</pattern> 
    </layout> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>DEBUG</level> 
    </filter> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>${application.home}/logs/debug_log.%d{yyyy-MM-dd}.log</fileNamePattern> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 
</appender> 

암입니까?

답변

0

내가 여기에 최근에 같은 문제를 조사하고 봤는데 내 솔루션입니다 : 당신은 당신의 펜더 구성에

<includeCallerData>true</includeCallerData> 

을 추가하여 includeCallerData 플래그를 설정해야합니다.

Btw, ch.qos.logback.classic.AsyncAppender을 사용하는 경우 플래그를 활성화해야하지만 AsyncAppender이 호출자 데이터를 삽입하여 이벤트를 수정하므로 아무데도 설정할 필요가 없습니다.

내 경우는 발신자 데이터를 획득하는 것은 성능에 심각한 영향을 미칠 수 있음을 발신자 데이터가 사방

<appender name="NOP" class="ch.qos.logback.core.helpers.NOPAppender" /> 
    <appender name="ASYNC.NOP" class="ch.qos.logback.classic.AsyncAppender"> 
     <includeCallerData>true</includeCallerData> 
     <appender-ref ref="NOP" /> 
    </appender> 

    <root level="..."> 
     ... 
     <appender-ref ref="ASYNC.NOP" /> 
    </root> 

가능 명심하도록 루트 로거 구성에 NOP의 펜더를 추가하기에 충분했다, 그래서 나는 것 프로덕션 환경에서는 사용하지 마십시오.