在Playframework 2.0生产中设置日志级别以进行调试?

sch*_*mmd 14 playframework playframework-2.0

在我的conf/application.conf设置我的应用程序的日志记录级别DEBUG.

logger.application=DEBUG
Run Code Online (Sandbox Code Playgroud)

这在sbt run我的申请时工作正常.但是,当我在生产模式下运行时sbt start,日志级别会被覆盖INFO.

有没有办法DEBUG在生产中运行时强制播放用作我的日志级别?

khe*_*aud 14

您有两个不同的记录器: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>
Run Code Online (Sandbox Code Playgroud)

这里播放记录器设置为日志级别> INFO,并且您的应用程序记录器(您在执行时使用的记录器Logger.debug/warn/error)设置为日志级别> DEBUG.根级别是所有记录器的默认级别,但是当每个记录器定义自己的级别时,不需要它.

您可以使用以下命令创建prod-logger.xml文件并以产品模式启动应用程序:start -Dlogger.resource=conf/prod-logger.xml.

以下是我用于生产服务器的配置,该服务器具有两个appender,用于在文件中存储级别> DEBUG,在另一个文件中存储级别> WARN.还有一个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>
Run Code Online (Sandbox Code Playgroud)

有关日志记录配置的更多详细信息,请查看Logback

  • 这有效,但我仍然不明白为什么生产中的application.conf中的'logger.application = DEBUG'被忽略. (13认同)
  • 确切地说,您没有将调试消息存储在FILE_DEBUG appender中,因为root和application都设置为不允许调试日志级别的级别INFO和WARN.为了实现你的建议,我必须在<root level ="DEBUG"中更改'root level ="WARN"'并在<logger name ="application"级别中更改<logger name ="application"level ="INFO"/> ="DEBUG"/>.无论如何,感谢您非常有用的示例! (2认同)