logRequest
§Signature
- def logRequest(marker: String)(implicit log: LoggingContext): Directive0
- def logRequest(marker: String, level: LogLevel)(implicit log: LoggingContext): Directive0
- def logRequest(show: HttpRequest => String)(implicit log: LoggingContext): Directive0
- def logRequest(show: HttpRequest => LogEntry)(implicit log: LoggingContext): Directive0
- def logRequest(magnet: LoggingMagnet[HttpRequest => Unit])(implicit log: LoggingContext): Directive0
The signature shown is simplified, the real signature uses magnets. [1]
[1] | See The Magnet Pattern for an explanation of magnet-based overloading. |
§Description
Logs the request using the supplied LoggingMagnet[HttpRequest => Unit]
. This LoggingMagnet
is a wrapped
function HttpRequest => Unit
that can be implicitly created from the different constructors shown above. These
constructors build a LoggingMagnet
from these components:
- A marker to prefix each log message with.
- A log level.
- A
show
function that calculates a string representation for a request.- An implicit
LoggingContext
that is used to emit the log message.- A function that creates a
LogEntry
which is a combination of the elements above.
It is also possible to use any other function HttpRequest => Unit
for logging by wrapping it with LoggingMagnet
.
See the examples for ways to use the logRequest
directive.
Use logResult
for logging the response, or logRequestResult
for logging both.
§Example
- // different possibilities of using logRequest
-
- // The first alternatives use an implicitly available LoggingContext for logging
- // marks with "get-user", log with debug level, HttpRequest.toString
- DebuggingDirectives.logRequest("get-user")
-
- // marks with "get-user", log with info level, HttpRequest.toString
- DebuggingDirectives.logRequest(("get-user", Logging.InfoLevel))
-
- // logs just the request method at debug level
- def requestMethod(req: HttpRequest): String = req.method.name
- DebuggingDirectives.logRequest(requestMethod _)
-
- // logs just the request method at info level
- def requestMethodAsInfo(req: HttpRequest): LogEntry = LogEntry(req.method.name, Logging.InfoLevel)
- DebuggingDirectives.logRequest(requestMethodAsInfo _)
-
- // This one doesn't use the implicit LoggingContext but uses `println` for logging
- def printRequestMethod(req: HttpRequest): Unit = println(req.method.name)
- val logRequestPrintln = DebuggingDirectives.logRequest(LoggingMagnet(_ => printRequestMethod))
-
- // tests:
- Get("/") ~> logRequestPrintln(complete("logged")) ~> check {
- responseAs[String] shouldEqual "logged"
- }
Contents