co-log-core |
|||
co-log |
|||
co-log-polysemy |
co-log
is a composable and configurable logging framework. It
combines all the benefits of Haskell idioms to provide a reasonable
and convenient interface. Though it uses some advanced concepts in its
core, we are striving to provide beginner-friendly API. The library
also contains complete documentation with a lot of beginner-friendly
examples, explanations and tutorials to guide users. The combination
of a pragmatic approach to logging and fundamental Haskell abstractions
allows us to create a highly composable and configurable logging
framework.
If you're interested in how different Haskell typeclasses are used to
implement core functions of co-log
, you can read the following blog
post which goes into detail about internal implementation specifics:
co-log
is also modular on the level of packages. We care a lot about a
low dependency footprint so you can build your logging only on top of
the minimal required interface for your use-case. This repository contains
the following packages:
co-log-core
: lightweight package with basic data types and general idea which depends only onbase
.co-log
: taggless final implementation of logging library based onco-log-core
.co-log-polysemy
: implementation of logging library based onco-log-core
and thepolysemy
extensible effects library.co-log-benchmark
: benchmarks of theco-log
library.
To provide a more user-friendly introduction to the library, we've
created the tutorial series which introduces the main concepts behind co-log
smoothly:
co-log
also cares about concurrent logging. For this purpose we have the concurrent-playground
executable where we experiment with different multithreading scenarios to test the library's behavior.
You can find it here:
co-log
is compared with basic functions like putStrLn
. Since IO overhead is
big enough, every benchmark dumps 10K messages to output. If a benchmark's name
doesn't contain Message
then this benchmark simply dumps the string "message"
to output, otherwise it works with the Message
data type from the co-log
library.
To run benchmarks, use the following command:
cabal v2-run co-log-bench -- --svg bench.svg &> /dev/null
Time for 10K messages: