monadlog-0.1.1.1: 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

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.

Minimal complete definition

askLogger, localLogger

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 # 

Methods

askLogger :: MaybeT m (Logger env) Source #

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

MonadLog env m => MonadLog env (ListT m) Source # 

Methods

askLogger :: ListT m (Logger env) Source #

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

MonadIO m => MonadLog env (LogT env m) Source # 

Methods

askLogger :: LogT env m (Logger env) Source #

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

(Monoid w, MonadLog env m) => MonadLog env (WriterT w m) Source # 

Methods

askLogger :: WriterT w m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> WriterT w m a -> WriterT w m a Source #

(Monoid w, MonadLog env m) => MonadLog env (WriterT w m) Source # 

Methods

askLogger :: WriterT w m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> WriterT w m a -> WriterT w m a Source #

MonadLog env m => MonadLog env (StateT s m) Source # 

Methods

askLogger :: StateT s m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> StateT s m a -> StateT s m a Source #

MonadLog env m => MonadLog env (StateT s m) Source # 

Methods

askLogger :: StateT s m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> StateT s m a -> StateT s m a Source #

MonadLog env m => MonadLog env (IdentityT * m) Source # 

Methods

askLogger :: IdentityT * m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> IdentityT * m a -> IdentityT * m a Source #

MonadLog env m => MonadLog env (ExceptT e m) Source # 

Methods

askLogger :: ExceptT e m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> ExceptT e m a -> ExceptT e m a Source #

MonadLog env m => MonadLog env (ReaderT * r m) Source # 

Methods

askLogger :: ReaderT * r m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> ReaderT * r m a -> ReaderT * r m a Source #

MonadLog env m => MonadLog env (ContT * r m) Source # 

Methods

askLogger :: ContT * r m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> ContT * r m a -> ContT * r m a Source #

(MonadLog env m, Monoid w) => MonadLog env (RWST r w s m) Source # 

Methods

askLogger :: RWST r w s m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> RWST r w s m a -> RWST r w s m a Source #

(MonadLog env m, Monoid w) => MonadLog env (RWST r w s m) Source # 

Methods

askLogger :: RWST r w s m (Logger env) Source #

localLogger :: (Logger env -> Logger env) -> RWST r w s m a -> RWST r w s m a 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

Instances

MonadIO m => MonadLog env (LogT env m) Source # 

Methods

askLogger :: LogT env m (Logger env) Source #

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

MonadTrans (LogT env) Source # 

Methods

lift :: Monad m => m a -> LogT env m a #

Monad m => Monad (LogT env m) Source # 

Methods

(>>=) :: LogT env m a -> (a -> LogT env m b) -> LogT env m b #

(>>) :: LogT env m a -> LogT env m b -> LogT env m b #

return :: a -> LogT env m a #

fail :: String -> LogT env m a #

Monad m => Functor (LogT env m) Source # 

Methods

fmap :: (a -> b) -> LogT env m a -> LogT env m b #

(<$) :: a -> LogT env m b -> LogT env m a #

MonadFix m => MonadFix (LogT r m) Source # 

Methods

mfix :: (a -> LogT r m a) -> LogT r m a #

MonadFail m => MonadFail (LogT env m) Source # 

Methods

fail :: String -> LogT env m a #

Monad m => Applicative (LogT env m) Source # 

Methods

pure :: a -> LogT env m a #

(<*>) :: LogT env m (a -> b) -> LogT env m a -> LogT env m b #

(*>) :: LogT env m a -> LogT env m b -> LogT env m b #

(<*) :: LogT env m a -> LogT env m b -> LogT env m a #

MonadIO m => MonadIO (LogT env m) Source # 

Methods

liftIO :: IO a -> LogT env m a #

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

Constructors

FileLogSpec 

Fields

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"