记录Play 2中的所有请求

Rob*_*een 5 scala playframework-2.0

如何以与Apache日志(即包括URL和客户端IP)的方式类似的方式记录进入Play 2应用程序的所有请求?

Chr*_*ris 9

我想用Play 2.5.4做同样的事情.我把它们放在一起花了一点时间,所以我想我会分享我的步骤,希望它能为别人节省时间:

  1. 确保您有访问记录器.有一个如何在https://www.playframework.com/documentation/2.5.x/SettingsLogger中配置一个的示例, 但您可能想要使用这些设置; 我把配置我的记录器<file>${application.home:-.}/logs/access.log</file>,和 <immediateFlush>true</immediateFlush>.

  2. 在根包中创建一个新的RequestHandler,扩展默认处理程序:

import javax.inject.Inject
import play.api.http._
import play.api.routing._
import play.api.mvc.RequestHeader
import play.api.Logger

/**
 * Implemented to get custom, apache-style logging of requests without dumping the full netty wire.
 */
class RequestHandler @Inject() (router: Router, errorHandler: HttpErrorHandler,
                                configuration: HttpConfiguration, filters: HttpFilters) extends DefaultHttpRequestHandler(
  router, errorHandler, configuration, filters) {

  override def routeRequest(request: RequestHeader) = {
    Logger("access").info(s"Request from ${request.remoteAddress}: ${request}")
    super.routeRequest(request)
  }
}
Run Code Online (Sandbox Code Playgroud)

我来自Play 2.3,所以我原本打算使用GlobalSettings直到找到这个指南:https://www.playframework.com/documentation/2.5.x/GlobalSettings

向任何想要获得特定于Play 2.0的答案的人致歉,但看到我自己的2.5重点搜索引导我到这里,我认为这个答案不会造成多大伤害.


dre*_*xin 6

这就是http过滤器的用途.以下是一些详细的示例:http://www.playframework.com/documentation/2.1.1/ScalaHttpFilters