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)
}
)
}