首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akka-http logrequest不记录请求正文

Akka-http logrequest不记录请求正文
EN

Stack Overflow用户
提问于 2017-08-02 18:39:14
回答 1查看 1.7K关注 0票数 1

我正在使用akka-http,并尝试使用logrequest记录特定路径上的请求:

代码语言:javascript
复制
 path(Segment / "account") { id =>
            logRequest("users/account", Logging.InfoLevel) {
              post {
              entity(as[Account]) { account => ???
                complete(HttpResponse(StatusCodes.NoContent))
              }
            }
          }

然而,在我的日志中我看到了类似这样的东西

代码语言:javascript
复制
HttpRequest(HttpMethod(POST),https://localhost:9009/api/users/123/account,List(Host: localhost:9009, User-Agent: akka-http/10.0.6, Timeout-Access: <function1>),HttpEntity.Chunked(application/json),HttpProtocol(HTTP/1.1))

我正在寻找的是确切的请求,包括请求者发送的正文(json)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-03 08:33:36

日志的"HttpEntity.Chunked(application/json)"段是HttpEntity.Chunked#toString的输出。要获取作为流实现的整个请求体,您需要调用HttpEntity#toStrictChunked请求实体转换为Strict请求实体。您可以在自定义路由中进行此呼叫:

代码语言:javascript
复制
def logRequestEntity(route: Route, level: LogLevel)
                    (implicit m: Materializer, ex: ExecutionContext) = {

  def requestEntityLoggingFunction(loggingAdapter: LoggingAdapter)(req: HttpRequest): Unit = {
    val timeout = 900.millis
    val bodyAsBytes: Future[ByteString] = req.entity.toStrict(timeout).map(_.data)
    val bodyAsString: Future[String] = bodyAsBytes.map(_.utf8String)
    bodyAsString.onComplete {
      case Success(body) =>
        val logMsg = s"$req\nRequest body: $body"
        loggingAdapter.log(level, logMsg)
      case Failure(t) =>
        val logMsg = s"Failed to get the body for: $req"
        loggingAdapter.error(t, logMsg)
    }
  }
  DebuggingDirectives.logRequest(LoggingMagnet(requestEntityLoggingFunction(_)))(route)
}

要使用上述功能,请将您的路由传递给它:

代码语言:javascript
复制
val loggedRoute = logRequestEntity(route, Logging.InfoLevel)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45458522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档