simple-log-0.9.6: Simple log for Haskell

Safe HaskellNone
LanguageHaskell2010

System.Log.Simple

Description

Fast start

Create log config:

myCfg = logCfg [("", Info), ("app", Trace), ("app.sub", Debug)]
 

Create log and run log monad

run ∷ IO ()
run = runLog myCfg [handler text (file "out.log")] $ yourFunction
 

Function within log monad:

yourFunction ∷ MonadLog m ⇒ m ()
yourFunction = component "app" $ scope "your" $ do
	sendLog Trace "Hello from your function"
 

Each component can have different level in config, subcomponents are specified with '.' Components have independent scopes Scopes can be nested and separated with '/':

function2 ∷ MonadLog m ⇒ m ()
function2 = component "app.sub" $ scope "foo" $ do
	scope "bar/baz" $ do
		sendLog Info "Component app.sub and scope foobarbaz"
		sendLog Trace "Invisible: app.sub configured with debug level"
	sendLog Info "Same component and scope foo"
	component "module" $ sendLog Info "Component module and root scope"
 

You can update config with updateLogConfig (or modifyLogConfig within log monad) function And change handlers with updateLogHandlers (modifyLogHandlers)

There're also global logger globalLog, that can be used with runGlobalLog

test ∷ IO ()
test = do
	updateLogHandlers globalLog ([handler text (file "test.log")]:)
	runGlobalLog $ do
		sendLog Info "This will go to test.log too"
		modifyLogConfig (set (ix "") Debug)
		sendLog Debug "Now debug is logged too"
 
Synopsis

Documentation

data LogConfig Source #

Constructors

LogConfig 
Instances
Show LogConfig Source # 
Instance details

Defined in System.Log.Simple.Base

Default LogConfig Source # 
Instance details

Defined in System.Log.Simple.Base

Methods

def :: LogConfig #

Ixed LogConfig Source # 
Instance details

Defined in System.Log.Simple.Base

At LogConfig Source # 
Instance details

Defined in System.Log.Simple.Base

type Index LogConfig Source # 
Instance details

Defined in System.Log.Simple.Base

type IxValue LogConfig Source # 
Instance details

Defined in System.Log.Simple.Base

type LogHandler = Consumer Message Source #

Message handler

type Consumer a = ContT () IO (a -> IO ()) Source #

Returns function which accepts consumed value

type Converter a = Message -> a Source #

data Message Source #

Log message

Instances
Read Message Source # 
Instance details

Defined in System.Log.Simple.Base

Show Message Source # 
Instance details

Defined in System.Log.Simple.Base

NFData Message Source # 
Instance details

Defined in System.Log.Simple.Base

Methods

rnf :: Message -> () #

data Level Source #

Level of message

Constructors

Trace 
Debug 
Info 
Warning 
Error 
Fatal 
Instances
Bounded Level Source # 
Instance details

Defined in System.Log.Simple.Base

Enum Level Source # 
Instance details

Defined in System.Log.Simple.Base

Eq Level Source # 
Instance details

Defined in System.Log.Simple.Base

Methods

(==) :: Level -> Level -> Bool #

(/=) :: Level -> Level -> Bool #

Ord Level Source # 
Instance details

Defined in System.Log.Simple.Base

Methods

compare :: Level -> Level -> Ordering #

(<) :: Level -> Level -> Bool #

(<=) :: Level -> Level -> Bool #

(>) :: Level -> Level -> Bool #

(>=) :: Level -> Level -> Bool #

max :: Level -> Level -> Level #

min :: Level -> Level -> Level #

Read Level Source # 
Instance details

Defined in System.Log.Simple.Base

Show Level Source # 
Instance details

Defined in System.Log.Simple.Base

Methods

showsPrec :: Int -> Level -> ShowS #

show :: Level -> String #

showList :: [Level] -> ShowS #

Default Level Source # 
Instance details

Defined in System.Log.Simple.Base

Methods

def :: Level #

Formattable Level Source # 
Instance details

Defined in System.Log.Simple.Base

data Log Source #

Log

Constructors

Log 

Fields

Instances
Monad m => MonadReader Log (LogT m) # 
Instance details

Defined in System.Log.Simple.Monad

Methods

ask :: LogT m Log #

local :: (Log -> Log) -> LogT m a -> LogT m a #

reader :: (Log -> a) -> LogT m a #

defCfg :: LogConfig Source #

Default log config — info level

logCfg :: [(Component, Level)] -> LogConfig Source #

Make log config by list of components and levels

componentCfg :: Component -> Lens' LogConfig (Maybe Level) Source #

Component config level lens

newLog :: LogConfig -> [LogHandler] -> IO Log Source #

Create log, returns root logger for root component

Messages from distinct threads and components are splitted in several chans, where they are processed, and then messages combined back and sent to log-thread

rootLog :: Log -> Log Source #

Get root log, i.e. just drop current component and scope

getLog :: Component -> Scope -> Log -> Log Source #

Get log for specified component and scope

subLog :: Component -> Scope -> Log -> Log Source #

Get sub-log

updateLogConfig :: MonadIO m => Log -> (LogConfig -> LogConfig) -> m LogConfig Source #

Modify log config

updateLogHandlers :: MonadIO m => Log -> ([LogHandler] -> [LogHandler]) -> m () Source #

Update log handlers, this restarts handlers thread

writeLog :: MonadIO m => Log -> Level -> Text -> m () Source #

Write message to log for current component and scope

stopLog :: MonadIO m => Log -> m () Source #

Wait log messages and stop log

newtype LogT m a Source #

Constructors

LogT 

Fields

Instances
MonadTrans LogT Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

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

Monad m => MonadReader Log (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

ask :: LogT m Log #

local :: (Log -> Log) -> LogT m a -> LogT m a #

reader :: (Log -> a) -> LogT m a #

Monad m => Monad (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

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

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

return :: a -> LogT m a #

fail :: String -> LogT m a #

Functor m => Functor (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

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

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

Applicative m => Applicative (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

pure :: a -> LogT m a #

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

liftA2 :: (a -> b -> c) -> LogT m a -> LogT m b -> LogT m c #

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

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

MonadIO m => MonadIO (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

liftIO :: IO a -> LogT m a #

MonadThrow m => MonadThrow (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

throwM :: Exception e => e -> LogT m a #

MonadCatch m => MonadCatch (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

catch :: Exception e => LogT m a -> (e -> LogT m a) -> LogT m a #

MonadMask m => MonadMask (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

mask :: ((forall a. LogT m a -> LogT m a) -> LogT m b) -> LogT m b #

uninterruptibleMask :: ((forall a. LogT m a -> LogT m a) -> LogT m b) -> LogT m b #

generalBracket :: LogT m a -> (a -> ExitCase b -> LogT m c) -> (a -> LogT m b) -> LogT m (b, c) #

(MonadIO m, MonadMask m) => MonadLog (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

askLog :: LogT m Log Source #

localLog :: (Log -> Log) -> LogT m a -> LogT m a Source #

class (MonadIO m, MonadMask m) => MonadLog m where Source #

Minimal complete definition

askLog, localLog

Methods

askLog :: m Log Source #

localLog :: (Log -> Log) -> m a -> m a Source #

Instances
(MonadLog m, MonadTrans t, MFunctor t, MonadIO (t m), MonadMask (t m)) => MonadLog (t m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

askLog :: t m Log Source #

localLog :: (Log -> Log) -> t m a -> t m a Source #

(MonadIO m, MonadMask m) => MonadLog (LogT m) Source # 
Instance details

Defined in System.Log.Simple.Monad

Methods

askLog :: LogT m Log Source #

localLog :: (Log -> Log) -> LogT m a -> LogT m a Source #

noLog :: (MonadIO m, MonadMask m) => LogT m a -> m a Source #

Run with no logging

withLog :: Log -> LogT m a -> m a Source #

Run LogT monad with Log

runLog :: (MonadIO m, MonadMask m) => LogConfig -> [LogHandler] -> LogT m a -> m a Source #

Run LogT monad with log config and handlers

sendLog :: MonadLog m => Level -> Text -> m () Source #

Log message, same as log

component :: MonadLog m => Text -> m a -> m a Source #

Log component, also sets root scope

scope_ :: MonadLog m => Text -> m a -> m a Source #

Create local scope

scope :: (MonadLog m, HasCallStack) => Text -> m a -> m a Source #

Scope with log all exceptions

scopeM :: (MonadLog m, MonadError e m, Show e, HasCallStack) => Text -> m a -> m a Source #

Scope with log exception from MonadError

scoper :: (MonadLog m, Show a, HasCallStack) => Text -> m a -> m a Source #

Scope with tracing result

scoperM :: (MonadLog m, MonadError e m, Show e, Show a, HasCallStack) => Text -> m a -> m a Source #

trace :: (MonadLog m, Show a) => Text -> m a -> m a Source #

Trace value

modifyLogConfig :: MonadLog m => (LogConfig -> LogConfig) -> m LogConfig Source #

Modify config, same as updateLogConfig, but within MonadLog

modifyLogHandlers :: MonadLog m => ([LogHandler] -> [LogHandler]) -> m () Source #

Modify handlers, same as updateLogHandlers, but within MonadLog

runGlobalLog :: LogT m a -> m a Source #

runConsoleLog :: (MonadIO m, MonadMask m) => LogConfig -> LogT m a -> m a Source #

runLogMsgs :: (MonadIO m, MonadMask m) => LogConfig -> LogT m a -> m (a, [Message]) Source #

runLogTexts :: (MonadIO m, MonadMask m) => Converter Text -> LogConfig -> LogT m a -> m (a, [Text]) Source #