<div dir="ltr">Hello! It's always good to know new ways to log things in Haskell because the old-fasioned logger is just pain in the code. Anyway I was writing an modern extensible logger some time ago and a lot of people are currently using it. Would you be so nice and take a look here ( <a href="https://github.com/wdanilo/haskell-logger">https://github.com/wdanilo/haskell-logger</a> ) and tell if Katip has all the features of Haskell-Logger or if there atre other features not covered by it? I would love to see even a very small comparison :) <div><br></div><div>All the best,</div><div>Wojciech</div></div><br><div class="gmail_quote"><div dir="ltr">pon., 14.03.2016 o 19:20 użytkownik Ozgun Ataman <<a href="mailto:ozgun.ataman@soostone.com">ozgun.ataman@soostone.com</a>> napisał:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Fellow Haskellers,</div><div><br></div><div>We're delighted to release a new logging framework today called "katip", centered around the idea of making it easy to include contextual data in individual log items in the form of structured fields. Katip has become, rather quickly, our go-to logging library at Soostone, included in everything from simple ad-hoc scripts to production systems under load. </div><div><br></div><div>You can find katip on both Hackage[1] and Github[2]. The core library has also been added to Stackage nightly, though the ElasticSearch backend is waiting on a dependency conflict on aeson. We hope you find it useful and look forward to any contributions or feedback!</div><div><br></div><div>[1] <a href="http://hackage.haskell.org/package/katip" target="_blank">http://hackage.haskell.org/package/katip</a></div><div>[2] <a href="https://github.com/Soostone/katip" target="_blank">https://github.com/Soostone/katip</a></div><div><br></div><div><br></div><div>As a little summary, here's the features checklist from the README:</div><div><br></div><div><div>* *Structured:* Logs are structured, meaning they can be individually</div><div>  tagged with key value data (JSON Objects). This helps you add</div><div>  critical details to log messages before you need them so that when</div><div>  you do, they are available. Katip exposes a typeclass for log</div><div>  payloads so that you can use rich, domain-specific Haskell types to</div><div>  add context that will be automatically merged in with existing log</div><div>  context.</div><div><br></div><div>* *Easy to Integration:* Katip was designed to be easily integrated</div><div>  into existing monads. By using typeclasses for logging facilities,</div><div>  individual subsystems and even libraries can easily add their own</div><div>  namespacing and context without having any knowledge of their</div><div>  logging environment.</div><div><br></div><div>* *Practical Use:* Katip comes with a set of convenience facilities</div><div>  built-in, so it can be used without much headache even in small</div><div>  projects.</div><div><br></div><div>    * A `Handle` backend for logging to files in simple settings.</div><div><br></div><div>    * A `AnyLogPayload` key-value type that makes it easy to log</div><div>      structured columns on the fly without having to define new data</div><div>      types.</div><div><br></div><div>    * A `Monadic` interface where logging namespace can be obtained</div><div>      from the monad context.</div><div><br></div><div>    * Multiple variants of the fundamental logging functions for</div><div>      optionally including fields and line-number information.</div><div><br></div><div>* *Extensible:* Can be easily extended (even at runtime) to output to</div><div>  multiple backends at once (known as scribes). See</div><div>  `katip-elasticsearch` as an example. Backends for other forms of</div><div>  storage are trivial to write, including both hosted database systems</div><div>  and SaaS logging providers.</div><div><br></div><div>* *Debug-Friendly:* Critical details for monitoring production systems</div><div>  such as host, PID, thread id, module and line location are</div><div>  automatically captured. User-specified attributes such as</div><div>  environment (e.g. Production, Test, Dev) and system name are also</div><div>  captured.</div><div><br></div><div>* *Configurable:* Can be adjusted on a per-scribe basis both with</div><div>  verbosity and severity.</div><div><br></div><div>    * *Verbosity* dictates how much of the log structure should</div><div>      actually get logged. In code you can capture highly detailed</div><div>      metadata and decide how much of that gets emitted to each backend.</div><div><br></div><div>    * *Severity* AKA "log level" is specified with each message and</div><div>      individual scribes can decide whether or not to record that</div><div>      severity. It is even possible to at runtime swap out and replace</div><div>      loggers, allowing for swapping in verbose debug logging at runtime</div><div>      if you want.</div><div><br></div><div>* *Battle-Tested:* Katip has been integrated into several production</div><div>  systems since 2015 and has logged hundreds of millions of messages</div><div>  to files and ElasticSearch.</div></div><div><br></div><div>
</div></div>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>