timber 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +45 -40
- data/lib/timber/log_devices/http.rb +1 -1
- data/lib/timber/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e73e5010b44d99e5adfb9a250bc263acd7c0880
|
4
|
+
data.tar.gz: 6df96f28f4362e88098bc7b2db8085fbc45146ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d156c42c78a02cf4f5627afb7ff70b1350e6f8abba7f984e1351f70fe7b54bdca3b421d02758575d5e5f287cd300e57c0e30c24a76d8fb70a975df71b683320c
|
7
|
+
data.tar.gz: bae815ef090ea535e10c7620d66293abb8c82ef9b134bfea3797fdfa3e66f590c5d991cbd817837deb767c6cd46a21fb90a0e3823ea7da0039c108af37e18150
|
data/README.md
CHANGED
@@ -12,49 +12,18 @@
|
|
12
12
|
|
13
13
|
1. [What is timber?](#what-is-timber)
|
14
14
|
2. [Why timber?](#why-timber)
|
15
|
-
3. [How does it work?](#how-does-it-work)
|
16
15
|
4. [Logging Custom Events](#logging-custom-events)
|
17
|
-
5. [The Timber Console / Pricing](#the-timber-console
|
16
|
+
5. [The Timber Console / Pricing](#the-timber-console--pricing)
|
18
17
|
6. [Install](#install)
|
19
18
|
|
20
19
|
|
21
20
|
## What is Timber?
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
[Timber](http://timber.io) is a different kind of logging platform; it goes beyond traditional
|
23
|
+
logging by automatically enriching your logs with application level metadata, turning them
|
24
|
+
into rich, structured events without altering the essence of logging.
|
26
25
|
|
27
|
-
|
28
|
-
For example:
|
29
|
-
|
30
|
-
1. The resulting log format, by deafult, is a simple, non-proprietary, JSON structure.
|
31
|
-
2. The [`Timber::Logger`](lib/timber/events) class extends `Logger`, and will never change or
|
32
|
-
extend the public API.
|
33
|
-
3. Where you send your logs is entirely up to you, but we hope you'll check out
|
34
|
-
[timber.io](https://timber.io). We've built a beautiful, modern, and *fast* console specifically
|
35
|
-
for the strutured data captured here.
|
36
|
-
|
37
|
-
|
38
|
-
## Why Timber?
|
39
|
-
|
40
|
-
Timber’s philosophy is that application insight should be open and owned by you. It should not
|
41
|
-
require a myriad of services to accomplish. And there is no better vehicle than logging:
|
42
|
-
|
43
|
-
1. The log is immutable and complete. [It is the truth](http://files.timber.io/images/log-is-the-truth.png) :)
|
44
|
-
2. It’s a shared practice that has been around since the dawn of computers.
|
45
|
-
3. It’s baked into every language, library, and framework. Even your own apps!
|
46
|
-
4. The data is open, accessible, and entirely owned by you. Yay!
|
47
|
-
|
48
|
-
The problem is that logs are unstructured, noisy, and hard to use. `grep` can only take you so
|
49
|
-
far! Timber solves this by properly structuring your logs, making them easy to search and
|
50
|
-
visualize -- enabling you to sanely realize the power of your logs.
|
51
|
-
|
52
|
-
|
53
|
-
## How does it work?
|
54
|
-
|
55
|
-
Timber automatically structures your logs by taking advantage of public APIs.
|
56
|
-
|
57
|
-
For example, by subscribing to `ActiveSupport::Notifications`, Timber can automatically turn this:
|
26
|
+
For example, it turns this:
|
58
27
|
|
59
28
|
```
|
60
29
|
Completed 200 OK in 117ms (Views: 85.2ms | ActiveRecord: 25.3ms)
|
@@ -62,7 +31,7 @@ Completed 200 OK in 117ms (Views: 85.2ms | ActiveRecord: 25.3ms)
|
|
62
31
|
|
63
32
|
Into this:
|
64
33
|
|
65
|
-
```
|
34
|
+
```javascript
|
66
35
|
{
|
67
36
|
"dt": "2016-12-01T02:23:12.236543Z",
|
68
37
|
"level": "info",
|
@@ -74,7 +43,7 @@ Into this:
|
|
74
43
|
"remote_addr": "123.456.789.10",
|
75
44
|
"request_id": "abcd1234"
|
76
45
|
},
|
77
|
-
"user": {
|
46
|
+
"user": { // <---- http://i.giphy.com/EldfH1VJdbrwY.gif
|
78
47
|
"id": 2,
|
79
48
|
"name": "Ben Johnson",
|
80
49
|
"email": "ben@johnson.com"
|
@@ -89,8 +58,30 @@ Into this:
|
|
89
58
|
}
|
90
59
|
```
|
91
60
|
|
92
|
-
|
93
|
-
|
61
|
+
Notice we include data that isn't in the log message directly. It does the same for
|
62
|
+
`http requests`, `sql queries`, `exceptions`, `template renderings`, and any other event
|
63
|
+
your framework logs.
|
64
|
+
|
65
|
+
(for a full list see [`Timber::Events`](lib/timber/events))
|
66
|
+
|
67
|
+
|
68
|
+
## Why Timber?
|
69
|
+
|
70
|
+
Glad you asked! :)
|
71
|
+
|
72
|
+
1. It's application aware and enriches your logs with data you can't get otherwise. This
|
73
|
+
entire process is fully managed for you.
|
74
|
+
2. It defines a shared schema across all of our libraries. Meaning your log data, across all
|
75
|
+
applications, will be normalized.
|
76
|
+
3. It does not alter the original log message, giving you the best of both worlds: human
|
77
|
+
readable logs *and* rich structured events.
|
78
|
+
4. It's completely transparent with absolutely no vendor lock-in or risk of code debt. Timber
|
79
|
+
adheres exactly to the `Logger` API. Meaning Timber can be installed and removed without
|
80
|
+
any reprocusion.
|
81
|
+
|
82
|
+
What really makes Timber unique is that at the end of the day it's just good ol' loggin'.
|
83
|
+
No special API, no proprietary data format, the data is accessible and owned by you.
|
84
|
+
[Woo!](http://i.giphy.com/7JYWGKgwxga5i.gif)
|
94
85
|
|
95
86
|
|
96
87
|
## Logging Custom Events
|
@@ -122,6 +113,20 @@ No mention of Timber anywhere!
|
|
122
113
|
|
123
114
|
## The Timber Console / Pricing
|
124
115
|
|
116
|
+
Like my mother always said:
|
117
|
+
|
118
|
+
> What good is structured log data if you can't search and visualize it?
|
119
|
+
|
120
|
+
Enter [the Timber Console](https://timber.io). It's a modern, fast, and beautiful console for
|
121
|
+
searching and visualizing your logs.
|
122
|
+
|
123
|
+
A few example queries:
|
124
|
+
|
125
|
+
1. `context.user.email:ben@johnson.com` - Tail a specific user!
|
126
|
+
2. `context.http.request_id:1234` - View *all* logs for a given HTTP request!
|
127
|
+
3. `event.http_reponse.time_ms>3000` - Easily find outliers and have the proper context to resolve them!
|
128
|
+
4. `level:warn` - Log levels in your logs. Imagine that!
|
129
|
+
|
125
130
|
> This is all gravy, but wouldn't the extra data get expensive?
|
126
131
|
|
127
132
|
If you opt use the [Timber Console](https://timber.io), we only charge for
|
@@ -8,7 +8,7 @@ module Timber
|
|
8
8
|
#
|
9
9
|
# See {#initialize} for options and more details.
|
10
10
|
class HTTP
|
11
|
-
API_URI = URI.parse("https://
|
11
|
+
API_URI = URI.parse("https://logs.timber.io/frames")
|
12
12
|
CONTENT_TYPE = "application/x-timber-msgpack-frame-1".freeze
|
13
13
|
CONNECTION_HEADER = "keep-alive".freeze
|
14
14
|
USER_AGENT = "Timber Ruby Gem/#{Timber::VERSION}".freeze
|
data/lib/timber/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Timber Technologies, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|