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

时间:2015-11-19 11:01:31

标签: scala logging playframework playframework-2.4

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)。从我在第一句话中链接的文档中可以明显看出这一点。

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

2 个答案:

答案 0 :(得分:2)

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

  

您的应用程序控制器可能驻留在控制器中   包裹,对吗?当你执行Logger(getClass)&lt; - getClass时   查找Application的包路径,然后就可以了   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的倡导者或开发者可以证明为什么这不能使用默认配置开箱即用,我会有兴趣听到这个。

答案 1 :(得分:0)

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

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

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

logger.controllers=DEBUG