packages feed

angel-0.5.2: 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)

import Text.Printf (printf)
import System.Locale (defaultTimeLocale)
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