angel-0.6.0: src/Angel/Log.hs
module Angel.Log ( cleanCalendar
, logger
, programLogger ) where
import Control.Monad.Reader
import Data.Time.LocalTime (ZonedTime,
getZonedTime)
import Data.Time.Format ( formatTime
, defaultTimeLocale)
import Text.Printf (printf)
import Angel.Data
-- |provide a clean, ISO-ish format for timestamps in logs
cleanCalendar :: ZonedTime -> String
cleanCalendar = formatTime defaultTimeLocale "%Y/%m/%d %H:%M:%S"
-- |log a line to stdout; indented for use with partial application for
-- |"local log"-type macroing
logger :: String -> Verbosity -> String -> AngelM ()
logger lname v msg = do
chk <- shouldLog v
when chk $ liftIO $ do
zt <- getZonedTime
printf "[%s] {%s} %s\n" (cleanCalendar zt) lname msg
programLogger :: String -> Verbosity -> String -> AngelM ()
programLogger id' = logger $ "- program: " ++ id' ++ " -"
shouldLog :: Verbosity -> AngelM Bool
shouldLog v = do
maxV <- asks verbosity
return $ v <= maxV