monad-log-0.1.1.0: A simple and fast logging monad

Safe HaskellNone
LanguageHaskell2010

Control.Monad.Log

Contents

Description

This module provides a mtl style MonadLog class and a concrete monad transformer LogT.

If you are an application author, you can use LogT transformer, a specialized reader monad to inject Logger.

If you are a library author, you should:

  • make your monad stack an instance of MonadLog, usually you can do this by embedding a Logger into your monad's reader part.
  • provide a default formatter, and API to run with customized formatter.

Synopsis

parametrized Logger type

newtype Level Source

a newtype wrapper arounded Int for GHC unpacking, with following TextShow instance:

showb (Level 0) = "DEBUG"
showb (Level 1) = "INFO"
showb (Level 2) = "WARNING"
showb (Level 3) = "ERROR"
showb (Level 4) = "CRITICAL"
showb (Level x) = "OTHER:" <> showb x

Constructors

Level Int 

levelDebug :: Level Source

Alias for Level 0

levelInfo :: Level Source

Alias for Level 1

levelWarning :: Level Source

Alias for Level 2

levelError :: Level Source

Alias for Level 3

levelCritical :: Level Source

Alias for Level 4

data Logger env Source

A logger type parametrized by an extra environment type.

Constructors

Logger 

Fields

filterLevel :: !Level

filter level, equal or above it will be logged.

environment :: env

parametrized logging environment.

formatter :: Level -> FormattedTime -> env -> Text -> LogStr

formatter function.

timeCache :: IO FormattedTime

a time cache to avoid cost of frequently formatting time.

logger :: LogStr -> IO ()

a FastLogger log function.

cleanUp :: IO ()

clean up action(flushing/closing file...).

envLens :: Functor f => (env -> f env) -> Logger env -> f (Logger env) Source

Lens for environment.

makeLogger Source

Arguments

:: MonadIO m 
=> (Level -> FormattedTime -> env -> Text -> LogStr)

formatter function

-> TimeFormat

check System.Log.FastLogger.Date

-> LogType 
-> Level

filter level

-> env

init environment

-> m (Logger env) 

make a Logger based on FastLogger.

makeDefaultLogger :: (MonadIO m, TextShow env) => TimeFormat -> LogType -> Level -> env -> m (Logger env) Source

defaultFormatter :: TextShow env => Level -> FormattedTime -> env -> Text -> LogStr Source

a default formatter with following format:

[LEVEL] [TIME] [ENV] LOG MESSAGE\n

defaultJSONFormatter :: ToJSON env => Level -> FormattedTime -> env -> Text -> LogStr Source

a default JSON formatter with following format:

{"level": LEVEL, "time": TIME, "env": ENV, "msg": "LOG MESSAGE" }\n

MonadLog class

class MonadIO m => MonadLog env m | m -> env where Source

This is the main class for using logging function in this package.

provide an instance for MonadLog to log within your monad stack.

Methods

askLogger :: m (Logger env) Source

localLogger :: (Logger env -> Logger env) -> m a -> m a Source

Instances

MonadLog env m => MonadLog env (MaybeT m) Source 
MonadLog env m => MonadLog env (ListT m) Source 
MonadLog env m => MonadLog env (IdentityT m) Source 
MonadIO m => MonadLog env (LogT env m) Source 
(Monoid w, MonadLog env m) => MonadLog env (WriterT w m) Source 
(Monoid w, MonadLog env m) => MonadLog env (WriterT w m) Source 
MonadLog env m => MonadLog env (StateT s m) Source 
MonadLog env m => MonadLog env (StateT s m) Source 
MonadLog env m => MonadLog env (ReaderT r m) Source 
MonadLog env m => MonadLog env (ExceptT e m) Source 
MonadLog env m => MonadLog env (ContT r m) Source 
(MonadLog env m, Monoid w) => MonadLog env (RWST r w s m) Source 
(MonadLog env m, Monoid w) => MonadLog env (RWST r w s m) Source 

withFilterLevel :: MonadLog env m => Level -> m a -> m a Source

run MonadLog within a new FilterLevel.

withEnv :: MonadLog env m => env -> m a -> m a Source

run MonadLog within a new environment.

localEnv :: MonadLog env m => (env -> env) -> m a -> m a Source

run MonadLog within a modified environment.

LogT, a concrete monad transformaer

newtype LogT env m a Source

A simple MonadLog instance.

a special reader monad which embed a Logger.

Constructors

LogT 

Fields

runLogT :: Logger env -> m a
 

Instances

MonadIO m => MonadLog env (LogT env m) Source 
MonadTrans (LogT env) Source 
Monad m => Monad (LogT env m) Source 
Monad m => Functor (LogT env m) Source 
MonadFix m => MonadFix (LogT r m) Source 
Monad m => Applicative (LogT env m) Source 
MonadIO m => MonadIO (LogT env m) Source 

runLogTSafe :: (MonadIO m, MonadMask m) => Logger env -> LogT env m a -> m a Source

safely run LogT inside MonadMask. Logs are guaranteed to be flushed on exceptions.

runLogTSafeBase :: (MonadBaseControl IO m, MonadIO m) => Logger env -> LogT env m a -> m a Source

safely run LogT inside 'MonadBaseControl IO m'. Logs are guaranteed to be flushed on exceptions.

runLogT' :: MonadIO m => Logger env -> LogT env m a -> m a Source

runLogT' = flip runLogT, run LogT without clean up. usually used inside different threads so that an exception won't clean up Logger.

logging functions

debug :: MonadLog env m => Text -> m () Source

info :: MonadLog env m => Text -> m () Source

warning :: MonadLog env m => Text -> m () Source

error :: MonadLog env m => Text -> m () Source

critical :: MonadLog env m => Text -> m () Source

debug' :: MonadLog env m => env -> Text -> m () Source

info' :: MonadLog env m => env -> Text -> m () Source

warning' :: MonadLog env m => env -> Text -> m () Source

error' :: MonadLog env m => env -> Text -> m () Source

critical' :: MonadLog env m => env -> Text -> m () Source

re-export from text-show and fast-logger

data LogStr :: *

Log message builder. Use (<>) to append two LogStr in O(1).

toLogStr :: ToLogStr msg => msg -> LogStr

data LogType :: *

Logger Type.

Constructors

LogNone

No logging.

LogStdout BufSize

Logging to stdout. BufSize is a buffer size

LogStderr BufSize

Logging to stdout. BufSize is a buffer size for each capability.

LogFileNoRotate FilePath BufSize

Logging to a file. BufSize is a buffer size for each capability.

LogFile FileLogSpec BufSize

Logging to a file. BufSize is a buffer size for each capability. File rotation is done on-demand.

LogCallback (LogStr -> IO ()) (IO ())

Logging with a log and flush action. run flush after log each message.

data FileLogSpec :: *

The spec for logging files

type FormattedTime = ByteString

Type aliaes for date format and formatted date.

simpleTimeFormat :: TimeFormat

A simple time cache using format "%d%b%Y:%T %z"

simpleTimeFormat' :: TimeFormat

A simple time cache using format "%d-%b-%Y %T"