private def log()

in newswires/app/lib/RequestLoggingFilter.scala [50:96]


  private def log(
      request: RequestHeader,
      outcome: Either[Throwable, Result],
      duration: Long
  ): Unit = {
    val originIp =
      request.headers.get("X-Forwarded-For").getOrElse(request.remoteAddress)
    val referer = request.headers.get("Referer").getOrElse("-")

    val queryStringMap = request.queryString.map { case (k, v) =>
      s"query_string.$k" -> v.mkString(", ")
    }

    val mandatoryMarkers = Map(
      "origin" -> originIp,
      "method" -> request.method,
      "duration" -> duration,
      "path" -> request.path
    ) ++ queryStringMap

    val optionalMarkers = Map(
      "status" -> outcome.map(_.header.status).toOption,
      "requestId" -> request.headers.get(RequestLoggingFilter.requestIdHeader),
      "referrer" -> referer
    ).collect { case (key, Some(value)) =>
      key -> value
    }

    val markers = MarkerContext(
      appendEntries((mandatoryMarkers ++ optionalMarkers).asJava)
    )

    outcome.fold(
      throwable => {
        logger.info(
          s"""$originIp - "${request.method} ${request.uri} ${request.version}" ERROR "$referer" ${duration}ms"""
        )(markers)
        logger.error(s"Error for ${request.method} ${request.uri}", throwable)
      },
      response => {
        val length = response.header.headers.getOrElse("Content-Length", 0)
        logger.info(
          s"""$originIp - "${request.method} ${request.uri} ${request.version}" ${response.header.status} $length "$referer" ${duration}ms"""
        )(markers)
      }
    )
  }