refactor: move the logic to check if the response should be logged into a separate function
This commit is contained in:
+12
-10
@@ -21,7 +21,7 @@ import Data.Time (ZonedTime, defaultTimeLocale, formatTime,
|
|||||||
import qualified Network.Wai as Wai
|
import qualified Network.Wai as Wai
|
||||||
import qualified Network.Wai.Middleware.RequestLogger as Wai
|
import qualified Network.Wai.Middleware.RequestLogger as Wai
|
||||||
|
|
||||||
import Network.HTTP.Types.Status (status400, status500)
|
import Network.HTTP.Types.Status (Status, status400, status500)
|
||||||
import System.IO.Unsafe (unsafePerformIO)
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
|
|
||||||
import PostgREST.Config (LogLevel (..))
|
import PostgREST.Config (LogLevel (..))
|
||||||
@@ -57,24 +57,26 @@ logWithDebounce loggerState action = do
|
|||||||
|
|
||||||
-- TODO stop using this middleware to reuse the same "observer" pattern for all our logs
|
-- TODO stop using this middleware to reuse the same "observer" pattern for all our logs
|
||||||
middleware :: LogLevel -> (Wai.Request -> Maybe BS.ByteString) -> Wai.Middleware
|
middleware :: LogLevel -> (Wai.Request -> Maybe BS.ByteString) -> Wai.Middleware
|
||||||
middleware logLevel getAuthRole = case logLevel of
|
middleware logLevel getAuthRole =
|
||||||
LogCrit -> requestLogger (const False)
|
unsafePerformIO $
|
||||||
LogError -> requestLogger (>= status500)
|
|
||||||
LogWarn -> requestLogger (>= status400)
|
|
||||||
LogInfo -> requestLogger (const True)
|
|
||||||
LogDebug -> requestLogger (const True)
|
|
||||||
where
|
|
||||||
requestLogger filterStatus = unsafePerformIO $
|
|
||||||
Wai.mkRequestLogger Wai.defaultRequestLoggerSettings
|
Wai.mkRequestLogger Wai.defaultRequestLoggerSettings
|
||||||
{ Wai.outputFormat =
|
{ Wai.outputFormat =
|
||||||
Wai.ApacheWithSettings $
|
Wai.ApacheWithSettings $
|
||||||
Wai.defaultApacheSettings &
|
Wai.defaultApacheSettings &
|
||||||
Wai.setApacheRequestFilter (\_ res -> filterStatus $ Wai.responseStatus res) &
|
Wai.setApacheRequestFilter (\_ res -> shouldLogResponse logLevel $ Wai.responseStatus res) &
|
||||||
Wai.setApacheUserGetter getAuthRole
|
Wai.setApacheUserGetter getAuthRole
|
||||||
, Wai.autoFlush = True
|
, Wai.autoFlush = True
|
||||||
, Wai.destination = Wai.Handle stdout
|
, Wai.destination = Wai.Handle stdout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shouldLogResponse :: LogLevel -> Status -> Bool
|
||||||
|
shouldLogResponse logLevel = case logLevel of
|
||||||
|
LogCrit -> const False
|
||||||
|
LogError -> (>= status500)
|
||||||
|
LogWarn -> (>= status400)
|
||||||
|
LogInfo -> const True
|
||||||
|
LogDebug -> const True
|
||||||
|
|
||||||
-- All observations are logged except some that depend on the log-level
|
-- All observations are logged except some that depend on the log-level
|
||||||
observationLogger :: LoggerState -> LogLevel -> ObservationHandler
|
observationLogger :: LoggerState -> LogLevel -> ObservationHandler
|
||||||
observationLogger loggerState logLevel obs = case obs of
|
observationLogger loggerState logLevel obs = case obs of
|
||||||
|
|||||||
Reference in New Issue
Block a user