@@ -0,0 +1,54 @@
1+# Katip [](https://travis-ci.org/Soostone/katip)
2+
3+Katip is a structured logging framework for Haskell.
4+
5+
6+
7+Kâtip (pronounced kah-tip) is the Turkish word for scribe.
8+
9+## Features
10+
11+* *Battle-Tested:* Katip has been integrated into several production
12+ systems since 2015 and has logged hundreds of millions of messages
13+ to files and ElasticSearch.
14+
15+* *Easy to Use:* Katip was designed to be easily integrated into
16+ existing systems. By using a typeclass for logging facilities,
17+ individual subsystems and even libraries can easily add their own
18+ namespacing and context without having any knowledge of their
19+ logging environment.
20+
21+* *Structured:* Logs are structured, meaning they can be individually
22+ tagged with key value data (JSON Objects). This helps you add
23+ critical details to log messages before you need them so that when
24+ you do, they are available. Katip exposes a typeclass for log
25+ payloads so that you can use rich, domain-specific Haskell types to
26+ add context that will be automatically merged in with existing log
27+ context.
28+
29+* *Debug-Friendly:* Critical details for monitoring production systems
30+ such as host, PID, thread id, module and line location are
31+ automatically captured. User-specified attributes such ass
32+ environment (e.g. Production, Test, Dev) and system name are also
33+ captured.
34+
35+* *Extensible:* Can be easily extended (even at runtime) to output to
36+ multiple backends at once (known as scribes). See
37+ @katip-elasticsearch@ as an example.
38+
39+* *Configurable:*. Can be adjusted on a per-scribe basis both with
40+ verbosity and severity.
41+
42+ * *Verbosity* dictates how much of the log structure should
43+ actually get logged. In code you can capture highly detailed
44+ metadata and decide how much of that gets emitted to each backend.
45+ * *Severity* AKA "log level" is specified with each message and
46+ individual scribes can decide whether or not to record that
47+ severity. It is even possible to at runtime swap out and replace
48+ loggers, allowing for swapping in verbose debug logging at runtime
49+ if you want.
50+
51+
52+## Examples
53+Be sure to look in the @examples@ directory for some examples of how
54+to integrate Katip into your own stack.