-- Copyright: 2009 Dino Morelli -- License: BSD3 (see LICENSE) -- Author: Dino Morelli module Cargs.Log ( logMsg, initLogging, setLoggingVerbose, setLoggingQuiet ) where import Control.Monad ( liftM ) import System.IO ( stdout ) import System.Locale ( defaultTimeLocale ) import System.Log.Handler.Simple ( streamHandler ) import System.Log.Logger ( Priority (..), noticeM , rootLoggerName, updateGlobalLogger, setHandlers, setLevel ) import System.Time ( formatCalendarTime , getClockTime, toCalendarTime ) import Text.Printf ( printf ) {- Format the time right now as needed for logging -} date :: IO String date = liftM ( formatCalendarTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" ) $ getClockTime >>= toCalendarTime {- Print a timestamped log message -} logMsg :: String -> IO () logMsg msg = do d <- date noticeM loggerCargs $ printf "%s> %s" d msg -- Logger identifier, used below loggerCargs :: String loggerCargs = "cargs" {- Default hslogger behavior sends logging to stderr. In this case, we want it to go to stdout. -} initLogging :: IO () initLogging = do sol <- streamHandler stdout DEBUG updateGlobalLogger rootLoggerName (setHandlers [sol]) setLoggingQuiet {- Shortcut for setting what we consider "verbose" logging: NOTICE (or below) -} setLoggingVerbose :: IO () setLoggingVerbose = updateGlobalLogger loggerCargs $ setLevel NOTICE {- Shortcut for setting what we consider "quiet": WARNING (or above) -} setLoggingQuiet :: IO () setLoggingQuiet = updateGlobalLogger loggerCargs $ setLevel WARNING