2012-06-08 2 views
13

conf/application.conf 내 응용 프로그램의 로깅 수준을 DEBUG으로 설정했습니다.Playframework 2.0 제작에서 디버깅 할 로깅 수준을 설정 하시겠습니까?

logger.application=DEBUG 

내 응용 프로그램이 sbt run 일 때 제대로 작동합니다. 그러나 생산 모드에서 sbt start을 실행하면 로그 수준이 INFO으로 다시 지정됩니다.

프로덕션 환경에서 실행할 때 DEBUG을 내 로그 수준으로 사용하도록 강제 할 수있는 방법이 있습니까?

답변

14

당신은 two different loggers : play 로거와 application 로거가 있습니다. 여기 개발 모드 logger.xml의 예입니다

<configuration> 
    <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern> 
     </encoder> 
    </appender> 

    <logger name="play" level="INFO" /> 
    <logger name="application" level="DEBUG" /> 

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

</configuration> 
다음

재생 로거의 로그 레벨 설정> 정보 및 응용 프로그램 로거 (Logger.debug/warn/error을 할 때 사용하는 하나) 로그 레벨 설정> 디버그. 루트 레벨은 모든 로거의 기본 레벨이지만 각 로거는 자체 ​​레벨을 정의하므로 필요하지 않습니다.

prod-logger.xml 파일을 만들고 응용 프로그램을 실행하려면 start -Dlogger.resource=conf/prod-logger.xml을 사용하십시오.

다음은 파일에 DEBUG를 저장하고 다른 파일에 WARN을 저장하는 두 개의 appender가있는 프로덕션 서버에 사용하는 구성입니다. 매일 파일 롤링을하는 TimeBasedRollingPolicy도 있습니다. 로깅 구성에 대한 자세한 세부 사항에 대한

<configuration> 
    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${application.home}/logs/debug_log.log</file> 
     <encoder> 
      <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern> 
     </encoder> 
     <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> 

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

    <logger name="play" level="INFO"/> 
    <logger name="application" level="INFO" /> 

    <root level="WARN"> 
     <appender-ref ref="FILE_DEBUG"/> 
     <appender-ref ref="FILE_WARN"/> 
    </root> 
</configuration> 

Logback

+13

이 작동을 살펴 가지고 있지만, 생산 application.conf에서 'logger.application = DEBUG가'무시하는 이유를 나는 아직도 이해가 안 돼요. –

+2

정확하게 말하자면 루트와 응용 프로그램 모두 디버그 로그 수준을 허용하지 않는 INFO 및 WARN 수준으로 설정되어 있으므로 FILE_DEBUG appender에 디버그 메시지를 저장하지 않습니다. "logger name ="application "레벨에서 'root level ="DEBUG "및 에서'root level ="WARN " = "DEBUG"/>. 어쨌든 당신의 매우 도움이되는 사례에 감사드립니다! –

관련 문제