从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,并且许多内容遵循“约定优于配置”原则。
答案 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