如何只为应用程序控制器启用日志记录调试级别?

时间:2019-06-10 23:23:17

标签: scala playframework logback play-framework-2.7

我使用的是Scala 2.12.x Play 2.7.x,作为我的应用程序控制器的一部分,我正在使用这样的记录器(或等效地执行with play.api.Logging):

val logger = play.api.Logger(this.getClass)

,配置conf/logback.xml如下所示。问题在于,应用程序控制器的logger.debug(...)语句未在日志中输出。我假设application设置为DEBUG看到了最后一个条目<logger name="application" level="DEBUG" />,但是由于没有输出DEBUG语句,显然有问题吗?

<!-- https://www.playframework.com/documentation/latest/SettingsLogger -->
<configuration>

    <conversionRule conversionWord="coloredLevel" converterClass="play.api.libs.logback.ColoredLevel" />

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${application.home:-.}/logs/application.log</file>
        <encoder>
            <pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>
        </encoder>
    </appender>

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

    <appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE" />
    </appender>

    <appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="STDOUT" />
    </appender>

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

    <root level="WARN">
        <appender-ref ref="ASYNCFILE" />
        <appender-ref ref="ASYNCSTDOUT" />
    </root>

</configuration>

PS:我知道我可以对所有功能启用DEBUG,但是那是我不需要的太多信息,我想看看我的控制器日志记录正在发生什么。

1 个答案:

答案 0 :(得分:1)

在这样的类中,记录器以play.api.Logger(this.getClass)实例化

package controller

class HomeController extends ... {
  val logger = play.api.Logger(this.getClass)
  logger.debug("msg")  
}

不是application记录器,而是一个名为

的独特记录器
controller.HomeController

要指定其日志级别,请将以下配置添加到logback.xml

<logger name="controllers" level="DEBUG" />

这使DEBUG成为controllers包下所有类的日志级别。

注意application记录器似乎已根据docs被弃用:

  

还有一个play.api.Logger单例对象,可让您   访问名为应用程序的记录器,但在Play中已弃用   2.7.0及更高版本。您应该声明自己的记录器实例...

如果消息仍未记录,请尝试从异步附加程序更改为同步附加程序,如下所示:

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