wai-extra-3.1.13.0: Provides some basic WAI handlers and middleware.

Safe Haskell | Safe-Inferred
Language | Haskell2010

Network.Wai.Middleware.RequestLogger

Contents

- Basic stdout logging
- Create more versions

Synopsis

- logStdout :: Middleware
- logStdoutDev :: Middleware
- mkRequestLogger :: RequestLoggerSettings -> IO Middleware
- data RequestLoggerSettings
- defaultRequestLoggerSettings :: RequestLoggerSettings
- outputFormat :: RequestLoggerSettings -> OutputFormat
- autoFlush :: RequestLoggerSettings -> Bool
- destination :: RequestLoggerSettings -> Destination
- data OutputFormat
  - = Apache IPAddrSource
  - | ApacheWithSettings ApacheSettings
  - | Detailed Bool
  - | DetailedWithSettings DetailedSettings
  - | CustomOutputFormat OutputFormatter
  - | CustomOutputFormatWithDetails OutputFormatterWithDetails
  - | CustomOutputFormatWithDetailsAndHeaders OutputFormatterWithDetailsAndHeaders
- data ApacheSettings
- defaultApacheSettings :: ApacheSettings
- setApacheIPAddrSource :: IPAddrSource -> ApacheSettings -> ApacheSettings
- setApacheRequestFilter :: (Request -> Response -> Bool) -> ApacheSettings -> ApacheSettings
- setApacheUserGetter :: (Request -> Maybe ByteString) -> ApacheSettings -> ApacheSettings
- data DetailedSettings = DetailedSettings {
  - useColors :: Bool
  - mModifyParams :: Maybe (Param -> Maybe Param)
  - mFilterRequests :: Maybe (Request -> Response -> Bool)
  - mPrelogRequests :: Bool
  }
- type OutputFormatter = ZonedDate -> Request -> Status -> Maybe Integer -> LogStr
- type OutputFormatterWithDetails = ZonedDate -> Request -> Status -> Maybe Integer -> NominalDiffTime -> [ByteString] -> Builder -> LogStr
- type OutputFormatterWithDetailsAndHeaders = ZonedDate -> Request -> Status -> Maybe Integer -> NominalDiffTime -> [ByteString] -> Builder -> [Header] -> LogStr
- data Destination
  - = Handle Handle
  - | Logger LoggerSet
  - | Callback Callback
- type Callback = LogStr -> IO ()
- data IPAddrSource
  - = FromSocket
  - | FromHeader
  - | FromFallback

# 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

mkRequestLogger :: RequestLoggerSettings -> IO Middleware Source #

data RequestLoggerSettings Source #

`RequestLoggerSettings` is an instance of Default. See Data.Default for more information.

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

#### Instances

Instances details

Default RequestLoggerSettings Source # |
Instance details Defined in Network.Wai.Middleware.RequestLogger Methods def :: RequestLoggerSettings Source #

defaultRequestLoggerSettings :: RequestLoggerSettings Source #

outputFormat :: RequestLoggerSettings -> OutputFormat Source #

Default value: `Detailed` `True`.

autoFlush :: RequestLoggerSettings -> Bool Source #

Only applies when using the `Handle` constructor for `destination`.

Default value: `True`.

destination :: RequestLoggerSettings -> Destination Source #

Default: `Handle` `stdout`.

data OutputFormat Source #

The logging format.

Constructors

Apache IPAddrSource |
ApacheWithSettings ApacheSettings | Since: 3.1.8
Detailed Bool | use colors?
DetailedWithSettings DetailedSettings | Since: 3.1.3
CustomOutputFormat OutputFormatter |
CustomOutputFormatWithDetails OutputFormatterWithDetails |
CustomOutputFormatWithDetailsAndHeaders OutputFormatterWithDetailsAndHeaders |

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

defaultApacheSettings :: ApacheSettings Source #

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

Constructors

DetailedSettings |

Fields

- useColors :: Bool
- mModifyParams :: Maybe (Param -> Maybe Param)
- mFilterRequests :: Maybe (Request -> Response -> Bool)
- mPrelogRequests :: Bool

  Since: 3.1.7

#### Instances

Instances details

Default DetailedSettings Source # |
Instance details Defined in Network.Wai.Middleware.RequestLogger Methods def :: DetailedSettings Source #

type OutputFormatter = ZonedDate -> Request -> Status -> Maybe Integer -> LogStr Source #

type OutputFormatterWithDetails = ZonedDate -> Request -> Status -> Maybe Integer -> NominalDiffTime -> [ByteString] -> Builder -> LogStr Source #

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 #

Constructors

Handle Handle |
Logger LoggerSet |
Callback Callback |

type Callback = LogStr -> IO () Source #

data IPAddrSource Source #

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.
FromFallback | From the peer address if header is not found.