* Correct type of response in logging directive samples #21009 * Updates to signatures in the docs as well
This commit is contained in:
parent
6fb2d176a1
commit
27efafecfc
4 changed files with 22 additions and 23 deletions
|
|
@ -48,7 +48,7 @@ public class DebuggingDirectivesExamplesTest extends JUnitRouteTest {
|
||||||
|
|
||||||
// logs just the request method at info level
|
// logs just the request method at info level
|
||||||
Function<HttpRequest, LogEntry> requestMethodAsInfo = (request) ->
|
Function<HttpRequest, LogEntry> requestMethodAsInfo = (request) ->
|
||||||
LogEntry.create(request.method().toString(), InfoLevel());
|
LogEntry.create(request.method().name(), InfoLevel());
|
||||||
|
|
||||||
final Route routeUsingFunction = get(() ->
|
final Route routeUsingFunction = get(() ->
|
||||||
logRequest(requestMethodAsInfo, () -> complete("logged")));
|
logRequest(requestMethodAsInfo, () -> complete("logged")));
|
||||||
|
|
@ -70,7 +70,7 @@ public class DebuggingDirectivesExamplesTest extends JUnitRouteTest {
|
||||||
(response.status().isSuccess()) ?
|
(response.status().isSuccess()) ?
|
||||||
Optional.of(
|
Optional.of(
|
||||||
LogEntry.create(
|
LogEntry.create(
|
||||||
request.method().toString() + ":" + response.status().intValue(),
|
request.method().name() + ":" + response.status().intValue(),
|
||||||
InfoLevel()))
|
InfoLevel()))
|
||||||
: Optional.empty(); // not a successful response
|
: Optional.empty(); // not a successful response
|
||||||
|
|
||||||
|
|
@ -80,7 +80,7 @@ public class DebuggingDirectivesExamplesTest extends JUnitRouteTest {
|
||||||
(!rejections.isEmpty()) ?
|
(!rejections.isEmpty()) ?
|
||||||
Optional.of(
|
Optional.of(
|
||||||
LogEntry.create(
|
LogEntry.create(
|
||||||
rejections
|
rejections
|
||||||
.stream()
|
.stream()
|
||||||
.map(Rejection::toString)
|
.map(Rejection::toString)
|
||||||
.collect(Collectors.joining(", ")),
|
.collect(Collectors.joining(", ")),
|
||||||
|
|
@ -116,7 +116,7 @@ public class DebuggingDirectivesExamplesTest extends JUnitRouteTest {
|
||||||
LogEntry.create(
|
LogEntry.create(
|
||||||
rejections
|
rejections
|
||||||
.stream()
|
.stream()
|
||||||
.map(rejection->rejection.toString())
|
.map(rejection -> rejection.toString())
|
||||||
.collect(Collectors.joining(", ")),
|
.collect(Collectors.joining(", ")),
|
||||||
InfoLevel());
|
InfoLevel());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ package docs.http.scaladsl.server.directives
|
||||||
|
|
||||||
import akka.event.Logging
|
import akka.event.Logging
|
||||||
import akka.http.scaladsl.model.{ HttpRequest, HttpResponse }
|
import akka.http.scaladsl.model.{ HttpRequest, HttpResponse }
|
||||||
|
import akka.http.scaladsl.server.RouteResult
|
||||||
import akka.http.scaladsl.server.directives.{ DebuggingDirectives, LogEntry, LoggingMagnet }
|
import akka.http.scaladsl.server.directives.{ DebuggingDirectives, LogEntry, LoggingMagnet }
|
||||||
import docs.http.scaladsl.server.RoutingSpec
|
import docs.http.scaladsl.server.RoutingSpec
|
||||||
|
|
||||||
|
|
@ -21,15 +22,15 @@ class DebuggingDirectivesExamplesSpec extends RoutingSpec {
|
||||||
DebuggingDirectives.logRequest(("get-user", Logging.InfoLevel))
|
DebuggingDirectives.logRequest(("get-user", Logging.InfoLevel))
|
||||||
|
|
||||||
// logs just the request method at debug level
|
// logs just the request method at debug level
|
||||||
def requestMethod(req: HttpRequest): String = req.method.toString
|
def requestMethod(req: HttpRequest): String = req.method.name
|
||||||
DebuggingDirectives.logRequest(requestMethod _)
|
DebuggingDirectives.logRequest(requestMethod _)
|
||||||
|
|
||||||
// logs just the request method at info level
|
// logs just the request method at info level
|
||||||
def requestMethodAsInfo(req: HttpRequest): LogEntry = LogEntry(req.method.toString, Logging.InfoLevel)
|
def requestMethodAsInfo(req: HttpRequest): LogEntry = LogEntry(req.method.name, Logging.InfoLevel)
|
||||||
DebuggingDirectives.logRequest(requestMethodAsInfo _)
|
DebuggingDirectives.logRequest(requestMethodAsInfo _)
|
||||||
|
|
||||||
// This one doesn't use the implicit LoggingContext but uses `println` for logging
|
// This one doesn't use the implicit LoggingContext but uses `println` for logging
|
||||||
def printRequestMethod(req: HttpRequest): Unit = println(req.method)
|
def printRequestMethod(req: HttpRequest): Unit = println(req.method.name)
|
||||||
val logRequestPrintln = DebuggingDirectives.logRequest(LoggingMagnet(_ => printRequestMethod))
|
val logRequestPrintln = DebuggingDirectives.logRequest(LoggingMagnet(_ => printRequestMethod))
|
||||||
|
|
||||||
// tests:
|
// tests:
|
||||||
|
|
@ -48,14 +49,14 @@ class DebuggingDirectivesExamplesSpec extends RoutingSpec {
|
||||||
DebuggingDirectives.logRequestResult(("get-user", Logging.InfoLevel))
|
DebuggingDirectives.logRequestResult(("get-user", Logging.InfoLevel))
|
||||||
|
|
||||||
// logs just the request method and response status at info level
|
// logs just the request method and response status at info level
|
||||||
def requestMethodAndResponseStatusAsInfo(req: HttpRequest): Any => Option[LogEntry] = {
|
def requestMethodAndResponseStatusAsInfo(req: HttpRequest): RouteResult => Option[LogEntry] = {
|
||||||
case res: HttpResponse => Some(LogEntry(req.method + ":" + res.status, Logging.InfoLevel))
|
case RouteResult.Complete(res) => Some(LogEntry(req.method.name + ": " + res.status, Logging.InfoLevel))
|
||||||
case _ => None // other kind of responses
|
case _ => None // no log entries for rejections
|
||||||
}
|
}
|
||||||
DebuggingDirectives.logRequestResult(requestMethodAndResponseStatusAsInfo _)
|
DebuggingDirectives.logRequestResult(requestMethodAndResponseStatusAsInfo _)
|
||||||
|
|
||||||
// This one doesn't use the implicit LoggingContext but uses `println` for logging
|
// This one doesn't use the implicit LoggingContext but uses `println` for logging
|
||||||
def printRequestMethodAndResponseStatus(req: HttpRequest)(res: Any): Unit =
|
def printRequestMethodAndResponseStatus(req: HttpRequest)(res: RouteResult): Unit =
|
||||||
println(requestMethodAndResponseStatusAsInfo(req)(res).map(_.obj.toString).getOrElse(""))
|
println(requestMethodAndResponseStatusAsInfo(req)(res).map(_.obj.toString).getOrElse(""))
|
||||||
val logRequestResultPrintln = DebuggingDirectives.logRequestResult(LoggingMagnet(_ => printRequestMethodAndResponseStatus))
|
val logRequestResultPrintln = DebuggingDirectives.logRequestResult(LoggingMagnet(_ => printRequestMethodAndResponseStatus))
|
||||||
|
|
||||||
|
|
@ -75,18 +76,18 @@ class DebuggingDirectivesExamplesSpec extends RoutingSpec {
|
||||||
DebuggingDirectives.logResult(("get-user", Logging.InfoLevel))
|
DebuggingDirectives.logResult(("get-user", Logging.InfoLevel))
|
||||||
|
|
||||||
// logs just the response status at debug level
|
// logs just the response status at debug level
|
||||||
def responseStatus(res: Any): String = res match {
|
def responseStatus(res: RouteResult): String = res match {
|
||||||
case x: HttpResponse => x.status.toString
|
case RouteResult.Complete(x) => x.status.toString
|
||||||
case _ => "unknown response part"
|
case RouteResult.Rejected(rejections) => "Rejected: " + rejections.mkString(", ")
|
||||||
}
|
}
|
||||||
DebuggingDirectives.logResult(responseStatus _)
|
DebuggingDirectives.logResult(responseStatus _)
|
||||||
|
|
||||||
// logs just the response status at info level
|
// logs just the response status at info level
|
||||||
def responseStatusAsInfo(res: Any): LogEntry = LogEntry(responseStatus(res), Logging.InfoLevel)
|
def responseStatusAsInfo(res: RouteResult): LogEntry = LogEntry(responseStatus(res), Logging.InfoLevel)
|
||||||
DebuggingDirectives.logResult(responseStatusAsInfo _)
|
DebuggingDirectives.logResult(responseStatusAsInfo _)
|
||||||
|
|
||||||
// This one doesn't use the implicit LoggingContext but uses `println` for logging
|
// This one doesn't use the implicit LoggingContext but uses `println` for logging
|
||||||
def printResponseStatus(res: Any): Unit = println(responseStatus(res))
|
def printResponseStatus(res: RouteResult): Unit = println(responseStatus(res))
|
||||||
val logResultPrintln = DebuggingDirectives.logResult(LoggingMagnet(_ => printResponseStatus))
|
val logResultPrintln = DebuggingDirectives.logResult(LoggingMagnet(_ => printResponseStatus))
|
||||||
|
|
||||||
// tests:
|
// tests:
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,7 @@ Signature
|
||||||
|
|
||||||
def logRequestResult(marker: String)(implicit log: LoggingContext): Directive0
|
def logRequestResult(marker: String)(implicit log: LoggingContext): Directive0
|
||||||
def logRequestResult(marker: String, level: LogLevel)(implicit log: LoggingContext): Directive0
|
def logRequestResult(marker: String, level: LogLevel)(implicit log: LoggingContext): Directive0
|
||||||
def logRequestResult(show: HttpRequest => HttpResponsePart => Option[LogEntry])
|
def logRequestResult(show: HttpRequest => RouteResult => Option[LogEntry])(implicit log: LoggingContext): Directive0
|
||||||
(implicit log: LoggingContext): Directive0
|
|
||||||
def logRequestResult(show: HttpRequest => Any => Option[LogEntry])(implicit log: LoggingContext): Directive0
|
|
||||||
|
|
||||||
The signature shown is simplified, the real signature uses magnets. [1]_
|
The signature shown is simplified, the real signature uses magnets. [1]_
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ Signature
|
||||||
|
|
||||||
def logResult(marker: String)(implicit log: LoggingContext): Directive0
|
def logResult(marker: String)(implicit log: LoggingContext): Directive0
|
||||||
def logResult(marker: String, level: LogLevel)(implicit log: LoggingContext): Directive0
|
def logResult(marker: String, level: LogLevel)(implicit log: LoggingContext): Directive0
|
||||||
def logResult(show: Any => String)(implicit log: LoggingContext): Directive0
|
def logResult(show: RouteResult => String)(implicit log: LoggingContext): Directive0
|
||||||
def logResult(show: Any => LogEntry)(implicit log: LoggingContext): Directive0
|
def logResult(show: RouteResult => LogEntry)(implicit log: LoggingContext): Directive0
|
||||||
def logResult(magnet: LoggingMagnet[Any => Unit])(implicit log: LoggingContext): Directive0
|
def logResult(magnet: LoggingMagnet[RouteResult => Unit])(implicit log: LoggingContext): Directive0
|
||||||
|
|
||||||
The signature shown is simplified, the real signature uses magnets. [1]_
|
The signature shown is simplified, the real signature uses magnets. [1]_
|
||||||
|
|
||||||
|
|
@ -24,7 +24,7 @@ Description
|
||||||
Logs the response.
|
Logs the response.
|
||||||
|
|
||||||
See :ref:`-logRequest-` for the general description how these directives work. This directive is different
|
See :ref:`-logRequest-` for the general description how these directives work. This directive is different
|
||||||
as it requires a ``LoggingMagnet[Any => Unit]``. Instead of just logging ``HttpResponses``, ``logResult`` is able to
|
as it requires a ``LoggingMagnet[RouteResult => Unit]``. Instead of just logging ``HttpResponses``, ``logResult`` is able to
|
||||||
log any :ref:`RouteResult` coming back from the inner route.
|
log any :ref:`RouteResult` coming back from the inner route.
|
||||||
|
|
||||||
Use ``logRequest`` for logging the request, or ``logRequestResult`` for logging both.
|
Use ``logRequest`` for logging the request, or ``logRequestResult`` for logging both.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue