Safe Haskell | None |
---|---|
Language | Haskell98 |
This module provides a fast logging system which scales on multicore environments (i.e. +RTS -N<x>).
Note: This library does not guarantee correct ordering of log messages when program is run on more than one core thus users should rely more on message timestamps than on their order in the log.
Synopsis
- data LoggerSet
- newFileLoggerSet :: BufSize -> FilePath -> IO LoggerSet
- newStdoutLoggerSet :: BufSize -> IO LoggerSet
- newStderrLoggerSet :: BufSize -> IO LoggerSet
- newLoggerSet :: BufSize -> Maybe FilePath -> IO LoggerSet
- type BufSize = Int
- defaultBufSize :: BufSize
- renewLoggerSet :: LoggerSet -> IO ()
- rmLoggerSet :: LoggerSet -> IO ()
- data LogStr
- class ToLogStr msg where
- fromLogStr :: LogStr -> ByteString
- logStrLength :: LogStr -> Int
- pushLogStr :: LoggerSet -> LogStr -> IO ()
- pushLogStrLn :: LoggerSet -> LogStr -> IO ()
- flushLogStr :: LoggerSet -> IO ()
- type FastLogger = LogStr -> IO ()
- type TimedFastLogger = (FormattedTime -> LogStr) -> IO ()
- data LogType
- newFastLogger :: LogType -> IO (FastLogger, IO ())
- withFastLogger :: LogType -> (FastLogger -> IO a) -> IO a
- newTimedFastLogger :: IO FormattedTime -> LogType -> IO (TimedFastLogger, IO ())
- withTimedFastLogger :: IO FormattedTime -> LogType -> (TimedFastLogger -> IO a) -> IO a
- module System.Log.FastLogger.Date
- module System.Log.FastLogger.File
- module System.Log.FastLogger.Types
Creating a logger set
A set of loggers. The number of loggers is the capabilities of GHC RTS. You can specify it with "+RTS -N<x>". A buffer is prepared for each capability.
newFileLoggerSet :: BufSize -> FilePath -> IO LoggerSet Source #
Creating a new LoggerSet
using a file.
Buffer size
defaultBufSize :: BufSize Source #
The default buffer size (4,096 bytes).
Renewing and removing a logger set
renewLoggerSet :: LoggerSet -> IO () Source #
Renewing the internal file information in LoggerSet
.
This does nothing for stdout and stderr.
rmLoggerSet :: LoggerSet -> IO () Source #
Flushing the buffers, closing the internal file information and freeing the buffers.
Log messages
Log message builder. Use (<>
) to append two LogStr in O(1).
class ToLogStr msg where Source #
Instances
ToLogStr String Source # | |
ToLogStr ByteString Source # | |
Defined in System.Log.FastLogger.LogStr toLogStr :: ByteString -> LogStr Source # | |
ToLogStr ByteString Source # | |
Defined in System.Log.FastLogger.LogStr toLogStr :: ByteString -> LogStr Source # | |
ToLogStr Builder Source # | |
ToLogStr Text Source # | |
ToLogStr Text Source # | |
ToLogStr LogStr Source # | |
fromLogStr :: LogStr -> ByteString Source #
Converting LogStr
to ByteString
.
Writing a log message
pushLogStr :: LoggerSet -> LogStr -> IO () Source #
Writing a log message to the corresponding buffer. If the buffer becomes full, the log messages in the buffer are written to its corresponding file, stdout, or stderr.
pushLogStrLn :: LoggerSet -> LogStr -> IO () Source #
Same as pushLogStr
but also appends a newline.
Flushing buffered log messages
flushLogStr :: LoggerSet -> IO () Source #
Flushing log messages in buffers. This function must be called explicitly when the program is being terminated.
Note: Since version 2.1.6, this function does not need to be explicitly called, as every push includes an auto-debounced flush courtesy of the auto-update package. Since version 2.2.2, this function can be used to force flushing outside of the debounced flush calls.
FastLogger
type FastLogger = LogStr -> IO () Source #
FastLogger
simply log logStr
.
type TimedFastLogger = (FormattedTime -> LogStr) -> IO () Source #
TimedFastLogger
pass FormattedTime
to callback and simply log its result.
this can be used to customize how to log timestamp.
Usually, one would write a wrapper on top of TimedFastLogger
, for example:
{--} log :: TimedFastLogger -> LogStr -> IO () log logger msg = logger (time -> toLogStr (show time) <> " " <> msg <> "n")
Logger Type.
LogNone | No logging. |
LogStdout BufSize | Logging to stdout.
|
LogStderr BufSize | Logging to stderr.
|
LogFileNoRotate FilePath BufSize | Logging to a file.
|
LogFile FileLogSpec BufSize | Logging to a file.
|
LogFileTimedRotate TimedFileLogSpec BufSize | Logging to a file.
|
LogCallback (LogStr -> IO ()) (IO ()) | Logging with a log and flush action. run flush after log each message. |
newFastLogger :: LogType -> IO (FastLogger, IO ()) Source #
Initialize a FastLogger
without attaching timestamp
a tuple of logger and clean up action are returned.
withFastLogger :: LogType -> (FastLogger -> IO a) -> IO a Source #
bracket
version of newFastLogger
:: IO FormattedTime | How do we get |
-> LogType | |
-> IO (TimedFastLogger, IO ()) |
Initialize a FastLogger
with timestamp attached to each message.
a tuple of logger and clean up action are returned.
withTimedFastLogger :: IO FormattedTime -> LogType -> (TimedFastLogger -> IO a) -> IO a Source #
bracket
version of newTimeFastLogger
Date cache
module System.Log.FastLogger.Date
File rotation
module System.Log.FastLogger.File
Types
module System.Log.FastLogger.Types