如何在Playframework 2.0的生产环境中将日志级别设置为调试模式?

14

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

logger.application=DEBUG

当我用sbt run运行我的应用程序时,它可以正常工作。但是,当我使用sbt start以生产模式运行它时,日志级别被覆盖为INFO

有没有办法在生产环境中强制Play使用DEBUG作为我的日志级别?

1个回答

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>

这里将play日志记录器设置为大于INFO的日志级别,而应用程序日志记录器(您在执行Logger.debug/warn/error时使用的日志记录器)设置为大于DEBUG的日志级别。根级别是所有记录器的默认级别,但由于每个记录器定义了自己的级别,因此不需要它。

您可以创建一个prod-logger.xml文件,并使用以下方式以生产模式启动您的应用程序:start -Dlogger.resource=conf/prod-logger.xml

这是我在生产服务器上使用的配置,有两个附加器用于存储大于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>

如果您想了解更多关于日志配置方面的细节,请查看Logback


13
这个方法可行,但我仍然不明白在生产环境中的application.conf文件中设定'logger.application=DEBUG'为什么被忽略了。 - Martin Konicek
2
准确地说,您并没有将调试消息存储在 FILE_DEBUG appender 中,因为 root 和 application 都设置为级别 INFO 和 WARN,不允许调试日志级别。要实现您的建议,我必须将 'root level="WARN"' 更改为 'root level="DEBUG"',并将 <logger name="application" level="INFO" /> 更改为 <logger name="application" level="DEBUG" />。无论如何,感谢您非常有帮助的示例! - carlo.polisini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接