README.md in timber-1.0.4 vs README.md in timber-1.0.5

- old
+ new

@@ -10,61 +10,30 @@ [![View docs](https://img.shields.io/badge/docs-viewdocs-blue.svg?style=flat-square "Viewdocs")](http://www.rubydoc.info/github/timberio/timber-ruby) 1. [What is timber?](#what-is-timber) 2. [Why timber?](#why-timber) -3. [How does it work?](#how-does-it-work) 4. [Logging Custom Events](#logging-custom-events) -5. [The Timber Console / Pricing](#the-timber-console-pricing) +5. [The Timber Console / Pricing](#the-timber-console--pricing) 6. [Install](#install) ## What is Timber? -Glad you asked! :) Timber takes a different approach to logging, in that it automatically -enriches and structures your logs without altering the essence of your original log messages. -Giving you the best of both worlds: human readable logs *and* rich structured data. +[Timber](http://timber.io) is a different kind of logging platform; it goes beyond traditional +logging by automatically enriching your logs with application level metadata, turning them +into rich, structured events without altering the essence of logging. -And it does so with absolutely no lock-in or risk of code debt. It's just good ol' loggin'™! -For example: +For example, it turns this: -1. The resulting log format, by deafult, is a simple, non-proprietary, JSON structure. -2. The [`Timber::Logger`](lib/timber/events) class extends `Logger`, and will never change or - extend the public API. -3. Where you send your logs is entirely up to you, but we hope you'll check out - [timber.io](https://timber.io). We've built a beautiful, modern, and *fast* console specifically - for the strutured data captured here. - - -## Why Timber? - -Timber’s philosophy is that application insight should be open and owned by you. It should not -require a myriad of services to accomplish. And there is no better vehicle than logging: - -1. The log is immutable and complete. [It is the truth](http://files.timber.io/images/log-is-the-truth.png) :) -2. It’s a shared practice that has been around since the dawn of computers. -3. It’s baked into every language, library, and framework. Even your own apps! -4. The data is open, accessible, and entirely owned by you. Yay! - -The problem is that logs are unstructured, noisy, and hard to use. `grep` can only take you so -far! Timber solves this by properly structuring your logs, making them easy to search and -visualize -- enabling you to sanely realize the power of your logs. - - -## How does it work? - -Timber automatically structures your logs by taking advantage of public APIs. - -For example, by subscribing to `ActiveSupport::Notifications`, Timber can automatically turn this: - ``` Completed 200 OK in 117ms (Views: 85.2ms | ActiveRecord: 25.3ms) ``` Into this: -```json +```javascript { "dt": "2016-12-01T02:23:12.236543Z", "level": "info", "message": "Completed 200 OK in 117ms (Views: 85.2ms | ActiveRecord: 25.3ms)", "context": { @@ -72,11 +41,11 @@ "method": "GET", "path": "/checkout", "remote_addr": "123.456.789.10", "request_id": "abcd1234" }, - "user": { + "user": { // <---- http://i.giphy.com/EldfH1VJdbrwY.gif "id": 2, "name": "Ben Johnson", "email": "ben@johnson.com" } }, @@ -87,14 +56,36 @@ } } } ``` -It does the same for `http requests`, `sql queries`, `exceptions`, `template renderings`, -and any other event your framework logs. (for a full list see [`Timber::Events`](lib/timber/events)) +Notice we include data that isn't in the log message directly. It does the same for +`http requests`, `sql queries`, `exceptions`, `template renderings`, and any other event +your framework logs. +(for a full list see [`Timber::Events`](lib/timber/events)) + +## Why Timber? + +Glad you asked! :) + +1. It's application aware and enriches your logs with data you can't get otherwise. This + entire process is fully managed for you. +2. It defines a shared schema across all of our libraries. Meaning your log data, across all + applications, will be normalized. +3. It does not alter the original log message, giving you the best of both worlds: human + readable logs *and* rich structured events. +4. It's completely transparent with absolutely no vendor lock-in or risk of code debt. Timber + adheres exactly to the `Logger` API. Meaning Timber can be installed and removed without + any reprocusion. + +What really makes Timber unique is that at the end of the day it's just good ol' loggin'. +No special API, no proprietary data format, the data is accessible and owned by you. +[Woo!](http://i.giphy.com/7JYWGKgwxga5i.gif) + + ## Logging Custom Events > Another service? More lock-in? :*( Nope! Logging custom events is Just Logging™. Check it out: @@ -119,9 +110,23 @@ No mention of Timber anywhere! ## The Timber Console / Pricing + +Like my mother always said: + +> What good is structured log data if you can't search and visualize it? + +Enter [the Timber Console](https://timber.io). It's a modern, fast, and beautiful console for +searching and visualizing your logs. + +A few example queries: + + 1. `context.user.email:ben@johnson.com` - Tail a specific user! + 2. `context.http.request_id:1234` - View *all* logs for a given HTTP request! + 3. `event.http_reponse.time_ms>3000` - Easily find outliers and have the proper context to resolve them! + 4. `level:warn` - Log levels in your logs. Imagine that! > This is all gravy, but wouldn't the extra data get expensive? If you opt use the [Timber Console](https://timber.io), we only charge for the size of the `message`, `dt`, and `event.custom` attributes. Everything else is