如何记录传入的请求和响应?

时间:2019-06-02 08:45:42

标签: scala akka akka-http

我正在使用Akka HTTP,并希望记录每个传入请求和传出结果。我知道它存在一个logRequestResult指令,但是如何使用它呢?还是适合我的目的?

1 个答案:

答案 0 :(得分:2)

是的,这是您要查找的指令,我同意-官方文档有点难理解。

这是带有logRequestResult的端点的样子:

    val requestHandler: Route = logRequestResult("req/resp", Logging.InfoLevel) {
        handleExceptions(errorHandler) {
            endpointRoutes
        }
    }

    def start()(implicit actorSystem: ActorSystem,
                actorMaterializer: ActorMaterializer): Future[Http.ServerBinding] =
        Http().bindAndHandle(
            handler = requestHandler,
            interface = host,
            port = port)

请注意,您可以为每个请求-响应条目选择通用前缀,即req/resp,以及可以使用请求-响应日志的日志记录级别,即Logging.InfoLevel

上面的示例产生的日志行类似于以下内容:

[your-actor-system-akka.actor.default-dispatcher-19] INFO  akka.actor.ActorSystemImpl - req/resp: Response for
  Request : HttpRequest(HttpMethod(GET),http://<host>/<path>,List(Host: <host>, Connection: close: <function1>),HttpEntity.Strict(none/none,ByteString()),HttpProtocol(HTTP/1.1))
  Response: Complete(HttpResponse(200 OK,List(),HttpEntity.Strict(text/plain; charset=UTF-8,OK),HttpProtocol(HTTP/1.1)))

快乐的哈克:)