首页 文章

如何在Play 2.4中正确记录应用程序DEBUG和INFO消息?

提问于
浏览
2

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")
  }    
}

...只在stdout中产生这个(同上 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 ) . 从我在第一句话中链接的文档中可以明显看出这一点 .

point 这里是:如果我的需求非常普通(记录我的应用程序的消息,还有调试和信息),我真的需要创建一个冗长的自定义配置文件吗?人们会假设一个基本的东西,因为这将默认工作,或使用一些最小的配置选项 . 如果您已经注意到,Play Framework被吹捧为good developer experience,并且它的许多内容遵循“约定优于配置”原则 .

2 回答

  • 0

    您在conf文件夹中根本没有.xml文件?添加此行应该为您修复:

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

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

    logger.controllers=DEBUG
    
  • 2

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

    您的应用程序控制器可能位于控制器包中,对吧?当你做Logger(getClass)< - getClass用于查找Application的包路径,然后它将是controllers.Application,这样你就可以添加一行<logger name =“controllers”level =“DEBUG”/>从控制器包中的类获取调试输出

    有一种方法没有自定义配置(适用于INFO但不适用于快速实验的DEBUG) . 但与使用更多粒度 Logger 相比,它有 significant drawbacks (如我的问题所示) .

    “应用程序” Logger 是直接使用Logger对象时使用的默认 Logger 名称,如Logger.info(“Hello,world!”),而不是创建自己的实例[...]但是这将清楚从那以后你很快就会失去对日志的细粒度配置,并且只能“全局”过滤日志,所以我从不使用它 . 此外,您的日志不会透露日志语句的位置,而只是打印它在“应用程序”中

    我不想要那些缺点,所以我确实创建了 conf/logback.xml (从default的副本开始)并添加了以下行的自定义 Logger :

    <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的倡导者或开发者可以证明为什么这样做没有兴趣听到这一点 .

相关问题