This is a logging facility. Yes, there are many, and this is the one with a beard, wearing flannel and boots, that gets the job done. It’s not the fanciest, it doesn’t have a cargo-van full of features. This logger is designed to be straightforward to use, provide a good set of standard features, and be useable across a broad set of code.
- Logging is a monadic activity. This activity is most often performed in a monad stack with a MonadIO context to allow writing to files.
- The specific logging action implementations are managed separately from the actions of logging messages in the target code. This allows logging to be configurable and the manner of logging to be specified at startup time without requiring changes in the code from which log messages are being generated.
- The logging implementation code can use cofunctors to adjust existing logging.
- Main code will typically retrieve the logging actions from a Reader context in your monad stack.
- The prettyprinter package is used for formatting.