如何仅为应用程序控制器启用日志记录 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>
我在 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>