safeEh logs properly

This commit is contained in:
Michael Snoyman 2013-03-10 14:14:44 +02:00
parent 1b8a1b9d42
commit 0c4643422c
3 changed files with 14 additions and 7 deletions

View File

@ -2,6 +2,7 @@
{-# LANGUAGE PatternGuards #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
module Yesod.Core.Run where
import Blaze.ByteString.Builder (fromLazyByteString, toByteString,
@ -32,7 +33,6 @@ import Data.Text.Encoding.Error (lenientDecode)
import qualified Network.HTTP.Types as H
import Network.Wai
import Prelude hiding (catch)
import System.IO (hPutStrLn, stderr)
import System.Log.FastLogger (Logger)
import System.Random (newStdGen)
import Web.Cookie (renderSetCookie)
@ -43,6 +43,9 @@ import Yesod.Internal (tokenKey)
import Yesod.Internal.Request (parseWaiRequest,
tooLargeResponse)
import Yesod.Routes.Class (Route, renderRoute)
import Language.Haskell.TH.Syntax (Loc, qLocation)
import Control.Monad.Logger (LogSource, LogLevel (LevelError), liftLoc)
import System.Log.FastLogger (LogStr, toLogStr)
yarToResponse :: YesodResponse -> [(CI ByteString, ByteString)] -> Response
yarToResponse (YRWai a) _ = a
@ -161,9 +164,12 @@ runHandler rhe@RunHandlerEnv {..} handler yreq = do
cts = reqAccept yreq
initSession = reqSession yreq
safeEh :: ErrorResponse -> YesodApp
safeEh er req = do
liftIO $ hPutStrLn stderr $ "Error handler errored out: " ++ show er
safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
-> ErrorResponse
-> YesodApp
safeEh log' er req = do
liftIO $ log' $(qLocation >>= liftLoc) "yesod-core" LevelError
$ toLogStr $ "Error handler errored out: " ++ show er
return $ YRPlain
H.status500
[]
@ -293,7 +299,7 @@ defaultYesodRunner YesodRunnerEnv {..} handler' req
, rheSub = yreSub
, rheUpload = fileUpload yreMaster
, rheLog = log'
, rheOnError = safeEh
, rheOnError = safeEh log'
}
rhe = rheSafe
{ rheOnError = runHandler rheSafe . localNoCurrent . errorHandler

View File

@ -225,6 +225,7 @@ ihamletToRepHtml ih = do
tell :: GWData (Route master) -> GWidget sub master ()
tell w = GWidget $ return ((), w)
-- | Type-restricted version of @lift@
-- | Type-restricted version of @lift@. Used internally to create better error
-- messages.
liftW :: GHandler sub master a -> GWidget sub master a
liftW = lift

View File

@ -81,7 +81,7 @@ library
, vector >= 0.9 && < 0.11
, aeson >= 0.5
, fast-logger >= 0.2
, monad-logger >= 0.3 && < 0.4
, monad-logger >= 0.3.1 && < 0.4
, conduit >= 0.5
, resourcet >= 0.4 && < 0.5
, lifted-base >= 0.1