Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
- data LogConfig = LogConfig {}
- type LogHandler = Consumer Message
- type Consumer a = ContT () IO (a -> IO ())
- type Converter a = Message -> a
- data Message
- data Level
- handler :: Converter a -> Consumer a -> Consumer Message
- data Log = Log {
- logComponent :: Component
- logScope :: Scope
- logPost :: Message -> IO ()
- logStop :: IO ()
- logConfig :: MVar LogConfig
- logHandlers :: MVar [LogHandler]
- logRestartHandlers :: IO ()
- defCfg :: LogConfig
- logCfg :: [(Component, Level)] -> LogConfig
- componentCfg :: Component -> Lens' LogConfig (Maybe Level)
- newLog :: LogConfig -> [LogHandler] -> IO Log
- rootLog :: Log -> Log
- getLog :: Component -> Scope -> Log -> Log
- subLog :: Component -> Scope -> Log -> Log
- updateLogConfig :: MonadIO m => Log -> (LogConfig -> LogConfig) -> m LogConfig
- updateLogHandlers :: MonadIO m => Log -> ([LogHandler] -> [LogHandler]) -> m ()
- writeLog :: MonadIO m => Log -> Level -> Text -> m ()
- stopLog :: MonadIO m => Log -> m ()
- newtype LogT m a = LogT {}
- class (MonadIO m, MonadMask m) => MonadLog m where
- noLog :: (MonadIO m, MonadMask m) => LogT m a -> m a
- withLog :: Log -> LogT m a -> m a
- runLog :: (MonadIO m, MonadMask m) => LogConfig -> [LogHandler] -> LogT m a -> m a
- sendLog :: MonadLog m => Level -> Text -> m ()
- component :: MonadLog m => Text -> m a -> m a
- scope_ :: MonadLog m => Text -> m a -> m a
- scope :: (MonadLog m, HasCallStack) => Text -> m a -> m a
- scopeM :: (MonadLog m, MonadError e m, Show e, HasCallStack) => Text -> m a -> m a
- scoper :: (MonadLog m, Show a, HasCallStack) => Text -> m a -> m a
- scoperM :: (MonadLog m, MonadError e m, Show e, Show a, HasCallStack) => Text -> m a -> m a
- trace :: (MonadLog m, Show a) => Text -> m a -> m a
- modifyLogConfig :: MonadLog m => (LogConfig -> LogConfig) -> m LogConfig
- modifyLogHandlers :: MonadLog m => ([LogHandler] -> [LogHandler]) -> m ()
- module System.Log.Simple.Text
- module System.Log.Simple.Stream
- module System.Log.Simple.File
- globalLog :: Log
- runGlobalLog :: LogT m a -> m a
- runConsoleLog :: (MonadIO m, MonadMask m) => LogConfig -> LogT m a -> m a
- runLogMsgs :: (MonadIO m, MonadMask m) => LogConfig -> LogT m a -> m (a, [Message])
- runLogTexts :: (MonadIO m, MonadMask m) => Converter Text -> LogConfig -> LogT m a -> m (a, [Text])
Documentation
Instances
Show LogConfig Source # | |
Default LogConfig Source # | |
Defined in System.Log.Simple.Base | |
Ixed LogConfig Source # | |
Defined in System.Log.Simple.Base | |
At LogConfig Source # | |
type Index LogConfig Source # | |
Defined in System.Log.Simple.Base | |
type IxValue LogConfig Source # | |
Defined in System.Log.Simple.Base |
type LogHandler = Consumer Message Source #
Message handler
Log message
Level of message
Instances
Bounded Level Source # | |
Enum Level Source # | |
Defined in System.Log.Simple.Base | |
Eq Level Source # | |
Ord Level Source # | |
Read Level Source # | |
Show Level Source # | |
Default Level Source # | |
Defined in System.Log.Simple.Base | |
Formattable Level Source # | |
Defined in System.Log.Simple.Base formattable :: Level -> FormatFlags -> Formatted # |
Log
Log | |
|
logCfg :: [(Component, Level)] -> LogConfig Source #
Make log config by list of components and levels
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
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
Instances
MonadTrans LogT Source # | |
Defined in System.Log.Simple.Monad | |
Monad m => MonadReader Log (LogT m) Source # | |
Monad m => Monad (LogT m) Source # | |
Functor m => Functor (LogT m) Source # | |
Applicative m => Applicative (LogT m) Source # | |
MonadIO m => MonadIO (LogT m) Source # | |
Defined in System.Log.Simple.Monad | |
MonadThrow m => MonadThrow (LogT m) Source # | |
Defined in System.Log.Simple.Monad | |
MonadCatch m => MonadCatch (LogT m) Source # | |
MonadMask m => MonadMask (LogT m) Source # | |
(MonadIO m, MonadMask m) => MonadLog (LogT m) Source # | |
runLog :: (MonadIO m, MonadMask m) => LogConfig -> [LogHandler] -> LogT m a -> m a Source #
Run LogT
monad with log config and handlers
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 #
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
module System.Log.Simple.Text
module System.Log.Simple.Stream
module System.Log.Simple.File
runGlobalLog :: LogT m a -> m a Source #