【问题标题】:How to get application DEBUG and INFO messages properly logged in Play 2.4?如何在 Play 2.4 中正确记录应用程序调试和信息消息?
【发布时间】:2016-02-21 11:40:22
【问题描述】:

来自Play 2.4 documentation,默认的应用程序日志级别应该是DEBUG,对吧:

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

但是,在我的日志中,我只收到 WARN 和 ERROR 级别的消息。

例如这段代码:

class Application extends Controller {

  val log = Logger(this.getClass)

  def index = Action {
    log.debug("debug")
    log.info("info")
    log.warn("warn!")
    log.error("ERROR")
    Ok("ok")
  }    
}

...仅在标准输出中产生这个(logs/application.log 中的同上):

[warn] c.Application - warn!
[error] c.Application - ERROR

如何正确记录应用程序的 DEBUG 和 INFO 消息?

使用 Play 2.4.3,基本上是默认配置,根本没有 conf/logback.xml。 (基于 SBT 的项目设置,没有 Typesafe Activator。)


澄清一下,我知道我可以为 Logback 创建一个自定义配置文件 (conf/logback.xml)。从我在第一句话中链接到的文档中可以明显看出这一点。

这里的要点是:如果我的需求非常普通(记录我的应用程序的消息,还有调试和信息),我真的需要创建一个冗长的自定义配置文件吗?一个人会假设一个基本的东西,因为这在默认情况下会起作用,或者有一些最小的配置选项。如果你注意到了,Play Framework 被吹捧为与good developer experience 合而为一,它的许多东西都遵循“约定优于配置”的原则。

【问题讨论】:

    标签: scala logging playframework playframework-2.4


    【解决方案1】:

    我从后端聊天中的colleague 中学到了什么:

    您的应用程序控制器可能位于控制器中 包,对吧?当你做Logger(getClass) controllers.Application 因此您可以添加一行 <logger name="controllers" level="DEBUG" /> 以从类中获取调试输出 在控制器包中

    一种没有自定义配置的方法(它适用于 INFO,但不适用于 DEBUG,需要快速实验)。但与使用更多粒度记录器(如我的问题)相比,它有明显的缺点

    “应用程序”记录器是默认记录器名称,如果您使用 直接使用 Logger 对象,如Logger.info("Hello, world!"),作为 反对创建自己的实例

    [...]

    但这显然会适得其反,因为你会失去粒度 配置日志,只能“全局”过滤日志, 所以我从不使用它。 此外,您的日志不会透露日志语句的位置 制作但只是打印它在“应用程序”中

    我不想要这些缺点,所以我创建了conf/logback.xml(从default 的副本开始)并添加了自定义记录器:

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

    所以现在我的val log = Logger(this.getClass) 方法有效。

    但我看不出需要 30-40 行自定义 XML 来实现几乎可以想象的最基本的东西是好的developer experience。如果某些 Play 倡导者或开发人员可以证明为什么默认配置不能开箱即用,我很想听听。

    【讨论】:

    • 这太疯狂了
    【解决方案2】:

    您在 conf 文件夹中根本没有 .xml 文件? 添加此行应该可以为您解决问题:

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

    您也可以在 application.conf 文件中覆盖它,尽管它会在未来被弃用:

    logger.controllers=DEBUG
    

    【讨论】:

    • 我正在寻找一种方法让日志记录工作没有自定义配置。我想要的是如此非常基本,以至于如果 Play 需要一段很长的自定义 XML 才能使其工作,我会觉得很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2011-11-23
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多