wai-extra-3.1.17: Provides some basic WAI handlers and middleware.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Network.Wai.Middleware.RequestLogger

Synopsis

Basic stdout logging

logStdout :: Middleware Source #

Production request logger middleware.

This uses the Apache logging format, and takes IP addresses for clients from the socket (see IPAddrSource for more information). It logs to stdout.

logStdoutDev :: Middleware Source #

Development request logger middleware.

This uses the Detailed True logging format and logs to stdout.

Create more versions

Settings type

data RequestLoggerSettings Source #

Settings for the request logger.

Sets what which format,

outputFormat, autoFlush, and destination are record fields for the record type RequestLoggerSettings, so they can be used to modify settings values using record syntax.

Since: 1.3.0

Instances

Instances details
Default RequestLoggerSettings Source #

DO NOT USE THIS INSTANCE! Please use defaultRequestLoggerSettings instead.

This instance will be removed in a future major release.

Instance details

Defined in Network.Wai.Middleware.RequestLogger

defaultRequestLoggerSettings :: RequestLoggerSettings Source #

Default RequestLoggerSettings.

Use this to create RequestLoggerSettings, and use the accompanying fields to edit these settings.

Since: 3.1.8

Settings fields

outputFormat :: RequestLoggerSettings -> OutputFormat Source #

Default value: Detailed True.

Since: 1.3.0

autoFlush :: RequestLoggerSettings -> Bool Source #

Only applies when using the Destination constructor for destination.

Default value: True.

Since: 1.3.0

destination :: RequestLoggerSettings -> Destination Source #

Default: Handle stdout.

Since: 1.3.0

More settings

data ApacheSettings Source #

Settings for the ApacheWithSettings OutputFormat. This is purposely kept as an abstract data type so that new settings can be added without breaking backwards compatibility. In order to create an ApacheSettings value, use defaultApacheSettings and the various 'setApache' functions to modify individual fields. For example:

setApacheIPAddrSource FromHeader defaultApacheSettings

Since: 3.1.8

setApacheIPAddrSource :: IPAddrSource -> ApacheSettings -> ApacheSettings Source #

Where to take IP addresses for clients from. See IPAddrSource for more information.

Default value: FromSocket

Since: 3.1.8

setApacheRequestFilter :: (Request -> Response -> Bool) -> ApacheSettings -> ApacheSettings Source #

Function that allows you to filter which requests are logged, based on the request and response

Default: log all requests

Since: 3.1.8

setApacheUserGetter :: (Request -> Maybe ByteString) -> ApacheSettings -> ApacheSettings Source #

Function that allows you to get the current user from the request, which will then be added in the log.

Default: return no user

Since: 3.1.8

data DetailedSettings Source #

Settings for the Detailed OutputFormat.

mModifyParams allows you to pass a function to hide confidential information (such as passwords) from the logs. If result is Nothing, then the parameter is hidden. For example: > myformat = Detailed True (Just hidePasswords) > where hidePasswords p@(k,v) = if k = "password" then (k, "***REDACTED***") else p

mFilterRequests allows you to filter which requests are logged, based on the request and response.

Since: 3.1.3

Instances

Instances details
Default DetailedSettings Source #

DO NOT USE THIS INSTANCE! Please use defaultDetailedSettings

This instance will be removed in a future major version.

Instance details

Defined in Network.Wai.Middleware.RequestLogger

defaultDetailedSettings :: DetailedSettings Source #

Default DetailedSettings

Uses colors, but doesn't modify nor filter anything. Also doesn't prelog requests.

Since: 3.1.16

type OutputFormatterWithDetailsAndHeaders Source #

Arguments

 = ZonedDate

When the log message was generated

-> Request

The WAI request

-> Status

HTTP status code

-> Maybe Integer

Response size

-> NominalDiffTime

Duration of the request

-> [ByteString]

The request body

-> Builder

Raw response

-> [Header]

The response headers

-> LogStr 

Same as OutputFormatterWithDetails but with response headers included

This is useful if you wish to include arbitrary application data in your logs, e.g., an authenticated user ID, which you would set in a response header in your application and retrieve in the log formatter.

Since: 3.0.27

data Destination Source #

Where to send the logs to.

Since: 1.3.0

type Callback = LogStr -> IO () Source #

When using a callback as a destination.

Since: 1.3.0

data IPAddrSource #

Source from which the IP source address of the client is obtained.

Constructors

FromSocket

From the peer address of the HTTP connection.

FromHeader

From X-Real-IP or X-Forwarded-For in the HTTP header.

This picks either X-Real-IP or X-Forwarded-For depending on which of these headers comes first in the ordered list of request headers.

If the X-Forwarded-For header is picked, the value will be assumed to be a comma-separated list of IP addresses. The value will be parsed, and the left-most IP address will be used (which is mostly likely to be the actual client IP address).

FromHeaderCustom [HeaderName]

From a custom HTTP header, useful in proxied environment.

The header value will be assumed to be a comma-separated list of IP addresses. The value will be parsed, and the left-most IP address will be used (which is mostly likely to be the actual client IP address).

Note that this still works as expected for a single IP address.

FromFallback

Just like FromHeader, but falls back on the peer address if header is not found.

FromRequest (Request -> ByteString)

This gives you the most flexibility to figure out the IP source address from the Request. The returned ByteString is used as the IP source address.