31 lines
1.1 KiB
Haskell
31 lines
1.1 KiB
Haskell
{-|
|
|
Module : PostgREST.Logger
|
|
Description : Wai Middleware to log requests to stdout.
|
|
-}
|
|
module PostgREST.Logger (middleware) where
|
|
|
|
import qualified Network.Wai as Wai
|
|
import qualified Network.Wai.Middleware.RequestLogger as Wai
|
|
|
|
import Network.HTTP.Types.Status (status400, status500)
|
|
import System.IO.Unsafe (unsafePerformIO)
|
|
|
|
import qualified PostgREST.Auth as Auth
|
|
import PostgREST.Config (LogLevel (..))
|
|
|
|
import Protolude
|
|
|
|
middleware :: LogLevel -> Wai.Middleware
|
|
middleware logLevel = case logLevel of
|
|
LogInfo -> requestLogger (const True)
|
|
LogWarn -> requestLogger (>= status400)
|
|
LogError -> requestLogger (>= status500)
|
|
LogCrit -> requestLogger (const False)
|
|
where
|
|
requestLogger filterStatus = unsafePerformIO $ Wai.mkRequestLogger Wai.defaultRequestLoggerSettings
|
|
{ Wai.outputFormat = Wai.ApacheWithSettings $
|
|
Wai.defaultApacheSettings
|
|
& Wai.setApacheRequestFilter (\_ res -> filterStatus $ Wai.responseStatus res)
|
|
& Wai.setApacheUserGetter Auth.getRole
|
|
}
|