玩! 2.5开发日志访问stdout

时间:2016-12-30 12:11:25

标签: playframework-2.5

使用Play 2.5可以轻松地在我的控制台上获取开发访问日志吗? 我可以读到的东西是“GET / foo / 123路由到FooController的id = 123的show动作”?

我已经找到了如何获取netty访问日志(btw,application.conf中的play.server.netty.log.wire = true选项因某些原因对我不起作用,但是-Dplay.server.netty。 log.wire = true确实如此),但它太低了。

1 个答案:

答案 0 :(得分:0)

您可以在conf目录中创建logger.xml文件。它应该遵循logback的文件格式。

例如,默认配置可能如下所示:

<configuration scan="true" scanPeriod="5 seconds">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%level %logger{15} - %message%n%xException{5}</pattern>
        </encoder>
    </appender>

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

    <root level="ERROR">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

然后,您可以为任何软件包选择性地启用日志级别:FATAL,ERROR,WARNING,INFO,DEBUG,TRACE或作为根级别的默认值。

这在playframework配置configuring logging

中有所描述

请注意,以前版本中的此行为为changed in 2.4.x,您可以通过application.conf配置记录器

完成日志记录后,您可以使用示例日志记录过滤器provided in the documentation将所有请求记录到您的服务器。

import javax.inject.Inject
import akka.stream.Materializer
import play.api.Logger
import play.api.mvc._
import scala.concurrent.{ExecutionContext, Future}

class LoggingFilter @Inject() (implicit val mat: Materializer, ec: ExecutionContext) extends Filter {

  def apply(nextFilter: RequestHeader => Future[Result])
           (requestHeader: RequestHeader): Future[Result] = {

    val startTime = System.currentTimeMillis

    nextFilter(requestHeader).map { result =>

      val endTime = System.currentTimeMillis
      val requestTime = endTime - startTime

      Logger.info(s"${requestHeader.method} ${requestHeader.uri} took ${requestTime}ms and returned ${result.header.status}")

      result.withHeaders("Request-Time" -> requestTime.toString)
    }
  }
}

您必须通过设置play.http.filters

来激活它
play.http.filters=com.example.LoggingFilter