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

Posted

技术标签:

【中文标题】如何仅为应用程序控制器启用日志记录调试级别?【英文标题】:How to enable logging DEBUG-level only for the Application Controllers'? 【发布时间】:2019-06-10 23:23:17 【问题描述】:

我在 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 %logger15 - %message%n%xException10</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】:

在这样的类中使用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 logger 根据docs 似乎已被弃用:

还有一个 play.api.Logger 单例对象可以让你 访问名为应用程序的记录器,但在 Play 中不推荐使用它 2.7.0及以上。您应该声明自己的记录器实例...

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

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

【讨论】:

嗨马里奥,谢谢,是的,我知道,OP 更多的是关于如何在不从其他任何地方获取日志的情况下启用应用程序进行调试。我将更新问题以更清楚地反映这一点。 哇太棒了!将对其进行测试:) 那么这个条目&lt;logger name="application" level="DEBUG" /&gt; 是什么?我假设app 下的所有内容.. 我也尝试过,但没有工作&lt;logger name="app" level="DEBUG" /&gt; application logger 已弃用但尚未删除,因此我们仍然可以像这样访问它:val logger = Logger("application") Ahhhhhh 错过了迁移条目:D

以上是关于如何仅为应用程序控制器启用日志记录调试级别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中启用/禁用日志级别?

使用 jdk 进行 slf4j 日志记录 – 如何启用调试?

如何启用 Hystrix DEBUG 级别的日志记录

如何在电脑中将日志一般状态改成调试状态

如何在 Apache2 服务器上启用日志级别调试 [关闭]

如何配置 WildFly 8.2.0 日志记录以仅在调试级别显示应用程序