timber 2.1.3 → 2.1.4
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 +97 -120
- data/lib/timber/contexts/user.rb +4 -2
- data/lib/timber/log_entry.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: 8abcf84c32b728be216520c831ea391b2d8d4aff
|
4
|
+
data.tar.gz: bd66dceece6b234a4de867656eeaeebeb5c9a7a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71850c881fe047e8e80f850010f99989b0206be96087cbf15ff84adb09b6d9780b062ba492e65c2fffd659bd2d013c12f6e2b829c60847d0e750ae56f9d6268d
|
7
|
+
data.tar.gz: 27c4421fcfa563a47d6d92911effde2472a3e48b4ba5da9b7def6ee3fa031f1bcc2d3a9cd54da88a3aa13db1f0a19e5556eb6d5c84fba4394aa62f28ab353c54
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# 🌲 Timber -
|
1
|
+
# 🌲 Timber - Great Ruby Logging Made Easy
|
2
2
|
|
3
3
|
[](LICENSE.md)
|
4
4
|
[](http://www.rubydoc.info/github/timberio/timber-ruby)
|
@@ -6,14 +6,15 @@
|
|
6
6
|
|
7
7
|
## Overview
|
8
8
|
|
9
|
-
Timber for Ruby is
|
10
|
-
|
11
|
-
|
12
|
-
[Timber console](#the-timber-console), Timber will
|
9
|
+
Timber for Ruby is a drop-in upgrade for your Ruby logs that unobtrusively
|
10
|
+
[structures your logs through augmentation](https://timber.io/docs/concepts/structuring-through-augmentation).
|
11
|
+
It's clean structured logging without the effort. When paired with the
|
12
|
+
[Timber console](#the-timber-console), Timber will
|
13
|
+
[fundamentally change the way you use your logs](#do-amazing-things-with-your-logs).
|
13
14
|
|
14
15
|
1. [**Easy setup** - `bundle exec timber install`](#installation)
|
15
|
-
2. [**Seamlessly integrates with popular libraries and frameworks**](#
|
16
|
-
3. [**
|
16
|
+
2. [**Seamlessly integrates with popular libraries and frameworks**](#integrations)
|
17
|
+
3. [**Do amazing things with your Ruby logs**](#do-amazing-things-with-your-logs)
|
17
18
|
|
18
19
|
|
19
20
|
## Installation
|
@@ -36,29 +37,39 @@ your logs into rich, useful, readable events. When paired with the
|
|
36
37
|
Use the `Timber::Logger` just like you would `::Logger`:
|
37
38
|
|
38
39
|
```ruby
|
39
|
-
logger.
|
40
|
-
|
41
|
-
|
40
|
+
logger.debug("Debug message")
|
41
|
+
logger.info("Info message")
|
42
|
+
logger.warn("Warn message")
|
43
|
+
logger.error("Error message")
|
44
|
+
logger.fatal("Fatal message")
|
42
45
|
```
|
43
46
|
|
47
|
+
We encourage standard / traditional log messages for non-meaningful events. And because Timber
|
48
|
+
[augments](https://timber.io/docs/concepts/structuring-through-augmentation) your logs with
|
49
|
+
metadata, you don't have to worry about making every log structured!
|
50
|
+
|
44
51
|
---
|
45
52
|
|
46
53
|
</p></details>
|
47
54
|
|
48
55
|
<details><summary><strong>Custom events</strong></summary><p>
|
49
56
|
|
50
|
-
Custom events allow you to extend beyond events already defined in
|
51
|
-
|
57
|
+
Custom events allow you to extend beyond events already defined in the
|
58
|
+
[`Timber::Events`](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Events) namespace.
|
59
|
+
If you aren't sure what an event is, please read the
|
60
|
+
["Metdata, Context, and Events" doc](https://timber.io/docs/concepts/metadata-context-and-events).
|
61
|
+
|
62
|
+
### How to use it
|
52
63
|
|
53
64
|
```ruby
|
54
65
|
logger.warn "Payment rejected", payment_rejected: {customer_id: "abcd1234", amount: 100, reason: "Card expired"}
|
55
|
-
|
56
|
-
# => Payment rejected @metadata {"level": "warn", "event": {"payment_rejected": {"customer_id": "abcd1234", "amount": 100, "reason": "Card expired"}}, "context": {...}}
|
57
66
|
```
|
58
67
|
|
59
|
-
|
60
|
-
|
61
|
-
|
68
|
+
1. [Search it](https://timber.io/docs/app/console/searching) with queries like: `type:payment_rejected` or `payment_rejected.amount:>100`
|
69
|
+
2. [Alert on it](https://timber.io/docs/app/console/alerts) with threshold based alerts
|
70
|
+
3. [Graph & visualize it](https://timber.io/docs/app/console/graphing)
|
71
|
+
4. [View this event's data and context](https://timber.io/docs/app/console/view-metdata-and-context)
|
72
|
+
5. ...read more in our [docs](https://timber.io/docs/languages/ruby/usage/custom-events)
|
62
73
|
|
63
74
|
---
|
64
75
|
|
@@ -66,22 +77,22 @@ logger.warn "Payment rejected", payment_rejected: {customer_id: "abcd1234", amou
|
|
66
77
|
|
67
78
|
<details><summary><strong>Custom contexts</strong></summary><p>
|
68
79
|
|
69
|
-
Context is additional data shared across log lines. Think of it like log join data.
|
70
|
-
This is how a query like `context.user.id:1` can show you all logs generated by that user.
|
71
80
|
Custom contexts allow you to extend beyond contexts already defined in
|
72
|
-
the [`Timber::Contexts`](
|
81
|
+
the [`Timber::Contexts`](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Contexts)
|
82
|
+
namespace. If you aren't sure what context is, please read the
|
83
|
+
["Metdata, Context, and Events" doc](https://timber.io/docs/concepts/metadata-context-and-events).
|
84
|
+
|
85
|
+
### How to use it
|
73
86
|
|
74
87
|
```ruby
|
75
88
|
logger.with_context(build: {version: "1.0.0"}) do
|
76
89
|
logger.info("My log message")
|
77
90
|
end
|
78
|
-
|
79
|
-
# => My log message @metadata {"level": "info", "context": {"build": {"version": "1.0.0"}}}
|
80
91
|
```
|
81
92
|
|
82
|
-
|
83
|
-
|
84
|
-
|
93
|
+
1. [Search it](https://timber.io/docs/app/console/searching) with queries like: `build.version:1.0.0`
|
94
|
+
2. [View this context when viewing a log's metadata](https://timber.io/docs/app/console/view-metdata-and-context)
|
95
|
+
3. ...read more in our [docs](https://timber.io/docs/languages/ruby/usage/custom-context)
|
85
96
|
|
86
97
|
---
|
87
98
|
|
@@ -89,20 +100,21 @@ end
|
|
89
100
|
|
90
101
|
<details><summary><strong>Metrics & Timings</strong></summary><p>
|
91
102
|
|
92
|
-
Aggregates destroy details,
|
93
|
-
|
94
|
-
data
|
95
|
-
|
103
|
+
Aggregates destroy details, events tell stories. With Timber, logging metrics and timings is simply
|
104
|
+
[logging an event](https://timber.io/docs/languages/ruby/usage/custom-events). Timber is based on
|
105
|
+
modern big-data principles and can aggregate inordinately large data sets in seconds. Logging
|
106
|
+
events (raw data as it exists), gives you the flexibility in the future to segment and aggregate
|
107
|
+
your data any way you see fit. This is superior to choosing specific paradigms before hand, when
|
108
|
+
you are unsure how you'll need to use your data in the future.
|
109
|
+
|
110
|
+
### How to use it
|
96
111
|
|
97
|
-
|
98
|
-
to the message.
|
112
|
+
Below is a contrived example of timing a background job:
|
99
113
|
|
100
114
|
```ruby
|
101
115
|
timer = Timber::Timer.start
|
102
116
|
# ... code to time ...
|
103
117
|
logger.info("Processed background job", background_job: {time_ms: timer})
|
104
|
-
|
105
|
-
# => Processed background job in 54.2ms @metadata {"level": "info", "event": {"background_job": {"time_ms": 54.2}}}
|
106
118
|
```
|
107
119
|
|
108
120
|
And of course, `time_ms` can also take a `Float` or `Fixnum`:
|
@@ -115,12 +127,13 @@ Lastly, metrics aren't limited to timings. You can capture any metric you want:
|
|
115
127
|
|
116
128
|
```ruby
|
117
129
|
logger.info("Credit card charged", credit_card_charge: {amount: 123.23})
|
118
|
-
|
119
|
-
# => Credit card charged @metadata {"level": "info", "event": {"credit_card_charge": {"amount": 123.23}}}
|
120
130
|
```
|
121
131
|
|
122
|
-
|
123
|
-
|
132
|
+
1. [Search it](https://timber.io/docs/app/console/searching) with queries like: `background_job.time_ms:>500`
|
133
|
+
2. [Alert on it](https://timber.io/docs/app/console/alerts) with threshold based alerts
|
134
|
+
3. [View this log's metadata in the console](https://timber.io/docs/app/console/view-metdata-and-context)
|
135
|
+
4. ...read more in our [docs](https://timber.io/docs/languages/ruby/usage/metrics-and-timings)
|
136
|
+
|
124
137
|
|
125
138
|
</p></details>
|
126
139
|
|
@@ -130,11 +143,13 @@ you desire.
|
|
130
143
|
Below are a few popular configuration options, for a comprehensive list, see
|
131
144
|
[Timber::Config](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Config).
|
132
145
|
|
133
|
-
<details><summary><strong>Logrageify. Silence noisy logs
|
146
|
+
<details><summary><strong>Logrageify. Silence noisy logs.</strong></summary><p>
|
134
147
|
|
135
148
|
Timber allows you to silence noisy logs that aren't of value to you, just like
|
136
|
-
[lograge](https://github.com/roidrage/lograge).
|
137
|
-
for anyone transitioning from lograge
|
149
|
+
[lograge](https://github.com/roidrage/lograge). As such, we've provided a convenience configuration
|
150
|
+
option for anyone transitioning from lograge.
|
151
|
+
|
152
|
+
### How to use it
|
138
153
|
|
139
154
|
```ruby
|
140
155
|
# config/initializers/timber.rb
|
@@ -143,6 +158,8 @@ config = Timber::Config.instance
|
|
143
158
|
config.logrageify!()
|
144
159
|
```
|
145
160
|
|
161
|
+
## How it works
|
162
|
+
|
146
163
|
It turns this:
|
147
164
|
|
148
165
|
```
|
@@ -174,6 +191,8 @@ config.integrations.active_record.silence = true
|
|
174
191
|
config.integrations.rack.http_events.collapse_into_single_event = true
|
175
192
|
```
|
176
193
|
|
194
|
+
### Pro-tip: Keep controller call logs (recommended)
|
195
|
+
|
177
196
|
Feel free to deviate and customize which logs you silence. We recommend a slight deviation
|
178
197
|
from lograge with the following settings:
|
179
198
|
|
@@ -198,6 +217,11 @@ For a full list of integration settings, see
|
|
198
217
|
|
199
218
|
<details><summary><strong>Silence specific requests (LB health checks, etc)</strong></summary><p>
|
200
219
|
|
220
|
+
Silencing noisy requests can be helpful for silencing load balance health checks, bot scanning,
|
221
|
+
or activity that generally is not meaningful to you.
|
222
|
+
|
223
|
+
### How to use it
|
224
|
+
|
201
225
|
The following will silence all `[GET] /_health` requests:
|
202
226
|
|
203
227
|
```ruby
|
@@ -217,33 +241,6 @@ The first parameter being the traditional Rack env hash, the second being a
|
|
217
241
|
|
218
242
|
</p></details>
|
219
243
|
|
220
|
-
<details><summary><strong>Change log formats</strong></summary><p>
|
221
|
-
|
222
|
-
Simply set the formatter like you would with any other logger:
|
223
|
-
|
224
|
-
```ruby
|
225
|
-
# This is set in your various environment files
|
226
|
-
logger.formatter = Timber::Logger::JSONFormatter.new
|
227
|
-
```
|
228
|
-
|
229
|
-
Your options are:
|
230
|
-
|
231
|
-
1. [`Timber::Logger::AugmentedFormatter`](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Logger/AugmentedFormatter) -
|
232
|
-
(default) A human readable format that _appends_ metadata to the original log line. The Timber
|
233
|
-
service can parse this data appropriately.
|
234
|
-
Ex: `My log message @metadata {"level":"info","dt":"2017-01-01T01:02:23.234321Z"}`
|
235
|
-
|
236
|
-
2. [`Timber::Logger::JSONFormatter`](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Logger/JSONFormatter) -
|
237
|
-
Ex: `{"level":"info","message":"My log message","dt":"2017-01-01T01:02:23.234321Z"}`
|
238
|
-
|
239
|
-
3. [`Timber::Logger::MessageOnlyFormatter`](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Logger/MessageOnlyFormatter) -
|
240
|
-
For use in development / test. Prints logs as strings with no metadata attached.
|
241
|
-
Ex: `My log message`
|
242
|
-
|
243
|
-
---
|
244
|
-
|
245
|
-
</p></details>
|
246
|
-
|
247
244
|
<details><summary><strong>Capture custom user context</strong></summary><p>
|
248
245
|
|
249
246
|
By default Timber automatically captures user context for most of the popular authentication
|
@@ -251,6 +248,8 @@ libraries (Devise, Omniauth, and Clearance). See
|
|
251
248
|
[Timber::Integrations::Rack::UserContext](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Integrations/Rack/UserContext)
|
252
249
|
for a complete list.
|
253
250
|
|
251
|
+
### How to use it
|
252
|
+
|
254
253
|
In cases where you Timber doesn't support your strategy, or you want to customize it further,
|
255
254
|
you can do so like:
|
256
255
|
|
@@ -281,7 +280,11 @@ end
|
|
281
280
|
<details><summary><strong>Capture release / deploy context</strong></summary><p>
|
282
281
|
|
283
282
|
[Timber::Contexts::Release](http://www.rubydoc.info/github/timberio/timber-ruby/Timber/Contexts/Release)
|
284
|
-
tracks the current application release and version.
|
283
|
+
tracks the current application release and version.
|
284
|
+
|
285
|
+
### How to use it
|
286
|
+
|
287
|
+
If you're on Heroku, simply enable the
|
285
288
|
[dyno metadata](https://devcenter.heroku.com/articles/dyno-metadata) feature. If you are not,
|
286
289
|
set the following environment variables and this context will be added automatically:
|
287
290
|
|
@@ -296,70 +299,44 @@ All variables are optional, but at least one must be present.
|
|
296
299
|
</p></details>
|
297
300
|
|
298
301
|
|
299
|
-
##
|
300
|
-
|
301
|
-
<details><summary><strong>Which log events does Timber structure for me?</strong></summary><p>
|
302
|
-
|
303
|
-
Out of the box you get everything in the [`Timber.Events`](lib/timber/events) namespace.
|
304
|
-
|
305
|
-
We also add context to every log, everything in the [`Timber.Contexts`](lib/timber/contexts)
|
306
|
-
namespace. Context is structured data representing the current environment when the log line
|
307
|
-
was written. It is included in every log line. Think of it like join data for your logs.
|
308
|
-
|
309
|
-
---
|
310
|
-
|
311
|
-
</p></details>
|
312
|
-
|
313
|
-
<details><summary><strong>What about my current log statements?</strong></summary><p>
|
314
|
-
|
315
|
-
They'll continue to work as expected. Timber adheres strictly to the default `Logger` interface
|
316
|
-
and will never deviate in *any* way.
|
302
|
+
## Integrations
|
317
303
|
|
318
|
-
|
319
|
-
|
304
|
+
[Timber for Ruby](https://github.com/timberio/timber-ruby) extends beyond your basic logging
|
305
|
+
functionality and integrates with popular libraries and frameworks. This makes structured quality
|
306
|
+
logging effortless. Below is a list of integrations we offer and the various events and contexts
|
307
|
+
they create.
|
320
308
|
|
321
|
-
|
309
|
+
1. [**Rails**](https://timber.io/docs/languages/ruby/integrations/rails)
|
310
|
+
2. [**Rack**](https://timber.io/docs/languages/ruby/integrations/rack)
|
311
|
+
3. [**Heroku**](https://timber.io/docs/languages/ruby/integrations/heroku)
|
312
|
+
4. [**Devise**](https://timber.io/docs/languages/ruby/integrations/devise)
|
313
|
+
5. [**Clearance**](https://timber.io/docs/languages/ruby/integrations/clearnace)
|
314
|
+
6. [**Omniauth**](https://timber.io/docs/languages/ruby/integrations/omniauth)
|
315
|
+
7. [**Warden**](https://timber.io/docs/languages/ruby/integrations/devise)
|
316
|
+
8. ...more coming soon! Make a request by [opening an issue](https://github.com/timberio/timber-ruby/issues/new)
|
322
317
|
|
323
|
-
<details><summary><strong>When to use metadata or events?</strong></summary><p>
|
324
318
|
|
325
|
-
|
326
|
-
data to your logs. And anyone that's implemented structured logging know's this can quickly get
|
327
|
-
out of hand. This is why we created events. Here's how we recommend using them:
|
319
|
+
## Do amazing things with your logs
|
328
320
|
|
329
|
-
|
330
|
-
|
331
|
-
2. Use metadata for debugging purposes; when you simply want additional insight without
|
332
|
-
polluting the message.
|
321
|
+
What does all of this mean? Doing amazing things with your logs! Being more productive, solving
|
322
|
+
problems faster, and _actually_ enjoying using your logs for application insight:
|
333
323
|
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
logger.info("Payment rejected", payment_rejected: {customer_id: "xiaus1934", amount: 1900, currency: "USD"})
|
341
|
-
```
|
342
|
-
|
343
|
-
### Example 2: Logging that an email was changed
|
344
|
-
|
345
|
-
This is definitely log worthy, but not something that is core to your business or application.
|
346
|
-
Instead of an event, use metadata:
|
347
|
-
|
348
|
-
```ruby
|
349
|
-
logger.info("Email successfully changed", old_email: old_email, new_email: new_email)
|
350
|
-
```
|
351
|
-
|
352
|
-
---
|
353
|
-
|
354
|
-
</p></details>
|
324
|
+
1. [**Live tail users on your app**](https://timber.io/docs/app/console/tail-a-user)
|
325
|
+
2. [**Trace HTTP requests**](https://timber.io/docs/app/console/trace-http-requests)
|
326
|
+
3. [**Inspect HTTP request parameters**](https://timber.io/docs/app/console/inspect-http-requests)
|
327
|
+
4. [**Powerful searching**](https://timber.io/docs/app/console/searching)
|
328
|
+
5. [**Threshold based alerting**](https://timber.io/docs/app/alerts)
|
329
|
+
6. ...and more! Checkout our [the Timber application docs](https://timber.io/docs/app)
|
355
330
|
|
356
331
|
|
357
332
|
## The Timber Console
|
358
333
|
|
359
|
-
[](https://
|
334
|
+
[](https://timber.io/docs/app)
|
335
|
+
|
336
|
+
[Learn more about our app.](https://timber.io/docs/app)
|
360
337
|
|
361
338
|
## Your Moment of Zen
|
362
339
|
|
363
340
|
<p align="center" style="background: #221f40;">
|
364
|
-
<a href="
|
341
|
+
<a href="https://timber.io"><img src="http://files.timber.io/images/readme-log-truth.png" height="947" /></a>
|
365
342
|
</p>
|
data/lib/timber/contexts/user.rb
CHANGED
@@ -13,17 +13,19 @@ module Timber
|
|
13
13
|
class User < Context
|
14
14
|
@keyspace = :user
|
15
15
|
|
16
|
-
attr_reader :id, :name, :email
|
16
|
+
attr_reader :id, :name, :email, :type, :meta
|
17
17
|
|
18
18
|
def initialize(attributes)
|
19
19
|
@id = attributes[:id]
|
20
20
|
@name = attributes[:name]
|
21
21
|
@email = attributes[:email]
|
22
|
+
@type = attributes[:type]
|
23
|
+
@meta = attributes[:meta]
|
22
24
|
end
|
23
25
|
|
24
26
|
# Builds a hash representation containing simple objects, suitable for serialization (JSON).
|
25
27
|
def as_json(_options = {})
|
26
|
-
{id: Timber::Util::Object.try(id, :to_s), name: name, email: email}
|
28
|
+
{id: Timber::Util::Object.try(id, :to_s), name: name, email: email, type: type, meta: meta}
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
data/lib/timber/log_entry.rb
CHANGED
@@ -9,7 +9,7 @@ module Timber
|
|
9
9
|
class LogEntry #:nodoc:
|
10
10
|
DT_PRECISION = 6.freeze
|
11
11
|
MESSAGE_MAX_BYTES = 8192.freeze
|
12
|
-
SCHEMA = "https://raw.githubusercontent.com/timberio/log-event-json-schema/v3.
|
12
|
+
SCHEMA = "https://raw.githubusercontent.com/timberio/log-event-json-schema/v3.1.1/schema.json".freeze
|
13
13
|
|
14
14
|
attr_reader :context_snapshot, :event, :level, :message, :progname, :tags, :time, :time_ms
|
15
15
|
|
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: 2.1.
|
4
|
+
version: 2.1.4
|
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: 2017-08-
|
11
|
+
date: 2017-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|