使用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确实如此),但它太低了。
答案 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