如何仅为应用程序控制器启用日志记录 DEBUG 级别?

How to enable logging DEBUG-level only for the Application Controllers'?

我在 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,但是我不需要的信息太多了,我想看看我的控制器的日志记录发生了什么。

记录器在 class 中用 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 包下所有 classes 的日志级别。

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

There is also a play.api.Logger singleton object that allows you to access a logger named application, but its use is deprecated in Play 2.7.0 and above. You should declare your own logger instances...

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

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