log-warper
is a high level and featureful logging library with monadic interface.
You can jump right into introduction tutorial
to see how to write logging with log-warper
.
Here is the list of features log-warper
provides.
Hierarchical logger names.
Logger names (tags for loggers) form hierarchy. It means, that ""
(also known as mempty
or rootLoggerName
) is a parent of logger with name "node"
which is
a parent of logger with name "node.communication"
. So, logger name comprises dot-separated components.
This means that if some logger name doesn't have some settings (like severity or output file) it takes
its settings from the closest parent, containing this settings.
Logging initialization from .yaml
configuration file.
Whole logging configuration can be specifed in a single .yaml
file.
See example here.
Monadic logging interface.
log-warper
uses mtl
-style type classes to provide monadic interfaces for logging.
Strict StateT
based pure logging.
See this tutorial
on pure logging with log-warper
.
Different severity levels of messages with the ability to configure Set
of severities.
Output is colored :star:
When you log messages, you see time of this logging message, logger name, severity and ThreadId
.
Message formatting is configurable. Color or logged message tag depends on Severity
for this message.
Flexible and easy creation of LoggerConfig
using monoidal builders and lenses.
In case .yaml
configuration is not enough for you, you can use lens
-based EDSL to create configurations.
LoggerConfig
also implements instances for Semigroup
and Monoid
so you can combine your configurations
from different sources (CLI and .yaml
for example).
Logger rotation.
log-warper
supports logger rotation. Yes, there exist logrotate
and similar tools.
But it's not easy to configure cross-platform (Windows, Linux, OSX) logging rotation with external tools.
Ability to acquire last N
megabytes of logs from in-memory cache.
In case you want to analyze logging messages you can take them from in-memory cache.
Here you can find hints and tips how to achieve desired behavior with log-warper
.
How can I redirect all output to stderr?
termSeveritiesErr: All
on top-level of your .yaml
file.How can I disable only Error messages for my logger?
excludeError
function.How can I show ThreadId
inside log message?
showTid: true
to your .yaml
file.How to easily disable terminal output?
.yaml
file:termSeveritiesOut : []
termSeveritiesErr : []
How can I enable messages with severity Info
and higher?
severity: Info+
inside tree node of your logger settings.How can I log inside functions like forkIO
?
liftLogIO
function.
Its Haddock contains nice usage example.How can I easily log exceptions without throwing them?
System.Wlog.Exceptions
module.This project uses
universum
as default prelude