timber 1.1.7 → 1.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +140 -142
- data/lib/timber.rb +2 -0
- data/lib/timber/logger.rb +22 -1
- data/lib/timber/overrides/rails_stdout_logging.rb +21 -0
- data/lib/timber/version.rb +1 -1
- data/spec/timber/logger_spec.rb +15 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c9b324e70feb9ff1373222ba8a5f713a7c3137a
|
4
|
+
data.tar.gz: 73ec3459c15d1a9438f762c9aec975eefd1e2852
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac167d0a6d8ae1f7968d3df367203d75df9405f26dd89d6d4bb6a0641182f45d6290c771f187099f6858633f593bac5d49da086fc1b35b4028745c377385ae98
|
7
|
+
data.tar.gz: 9b6d80aae0f5f44c821ea73f00ff9418e2656b52d007840c292f189182b4480e6b9907beae8bf365ace3d255f68494ac36668a84a9d40ab34f17ca51fa2ed302
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# 🌲 Timber - Master your Ruby apps with structured logging
|
2
2
|
|
3
3
|
<p align="center" style="background: #140f2a;">
|
4
|
-
<a href="http://
|
4
|
+
<a href="http://files.timber.io/images/readme-interface.gif"><img src="http://files.timber.io/images/readme-interface.gif" width="100%" /></a>
|
5
5
|
</p>
|
6
6
|
|
7
7
|
[![ISC License](https://img.shields.io/badge/license-ISC-ff69b4.svg)](LICENSE.md)
|
@@ -10,108 +10,125 @@
|
|
10
10
|
[![Code Climate](https://codeclimate.com/github/timberio/timber-ruby/badges/gpa.svg)](https://codeclimate.com/github/timberio/timber-ruby)
|
11
11
|
[![View docs](https://img.shields.io/badge/docs-viewdocs-blue.svg?style=flat-square "Viewdocs")](http://www.rubydoc.info/github/timberio/timber-ruby)
|
12
12
|
|
13
|
+
Still logging raw text? Timber is a complete *structured* logging solution that you can setup in
|
14
|
+
minutes. It solves logging so you don't have to!
|
13
15
|
|
14
|
-
|
16
|
+
To learn more, checkout out [timber.io](https://timber.io).
|
15
17
|
|
16
|
-
👉 **Timber is in beta testing, if interested in joining, please email us at
|
17
|
-
[beta@timber.io](mailto:beta@timber.io)**
|
18
18
|
|
19
|
-
|
19
|
+
## Installation
|
20
20
|
|
21
|
-
|
22
|
-
minutes. It goes beyond traditional log management by focusing on data quality and modern
|
23
|
-
developer standards.
|
21
|
+
1. *Add* the `timber` gem in `Gemfile`:
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
offers.
|
23
|
+
```ruby
|
24
|
+
# Gemfile
|
28
25
|
|
29
|
-
|
30
|
-
|
31
|
-
blog post.
|
26
|
+
gem 'timber'
|
27
|
+
```
|
32
28
|
|
29
|
+
2. *Install* the `Timber::Logger` in `config/environments/production.rb`:
|
33
30
|
|
34
|
-
|
31
|
+
```ruby
|
32
|
+
# config/environments/production.rb
|
35
33
|
|
36
|
-
|
34
|
+
# config.log_formatter = ::Logger::Formatter.new # <--------------------------- REMOVE ME
|
35
|
+
# config.logger = ActiveSupport::TaggedLogging.new(logger) # <----------------- REMOVE ME
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
[normalized, shared, schema](https://github.com/timberio/log-event-json-schema) that follows
|
47
|
-
[semantic versioning](http://semver.org/) and goes through a [standard release process](https://github.com/timberio/log-event-json-schema/releases).
|
48
|
-
This means you can *rely* on the structure of your logs and interact consistently with them
|
49
|
-
across apps of any language: queries, graphs, alerts, and other downstream consumers.
|
50
|
-
4. **Zero risk of code debt or lock-in.** Logging is a standard that has been around since the dawn
|
51
|
-
of computers. It's built into every language, framework, and library. Timber adheres strictly
|
52
|
-
to the default `Logger` interface. There are no special APIs, and no need to pepper your app
|
53
|
-
with Timber specific code. It's just better logging. If you choose to stop using Timber, you
|
54
|
-
can do so without consequence.
|
55
|
-
5. **Long term retention.** Timber is designed on modern big-data principles. As a result, we can
|
56
|
-
offer 6+ months of retention at prices cheaper than alternatives offering <1 month.
|
57
|
-
This allows you to unlock your logs for purposes beyond debugging.
|
37
|
+
config.logger = ActiveSupport::TaggedLogging.new(Timber::Logger.new(STDOUT)) # <-- ADD ME
|
38
|
+
```
|
39
|
+
|
40
|
+
---
|
41
|
+
|
42
|
+
<details><summary><strong>Prefer to see an example pull request?</strong></summary><p>
|
43
|
+
|
44
|
+
Checkout our the [Timber install example pull request](https://github.com/timberio/ruby-rails-example-app/pull/1/files)
|
58
45
|
|
59
46
|
---
|
60
47
|
|
61
48
|
</p></details>
|
62
49
|
|
63
|
-
<details><summary><strong>
|
50
|
+
<details><summary><strong>Not using Rails?</strong></summary><p>
|
64
51
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
52
|
+
No problem! You can easily install Timber following these steps:
|
53
|
+
|
54
|
+
1. *Insert* the Timber probes:
|
55
|
+
|
56
|
+
This should be executed *immediately after* you have required your dependencies.
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
Timber::Probes.insert!
|
60
|
+
```
|
61
|
+
|
62
|
+
2. *Add* the Rack middlewares:
|
63
|
+
|
64
|
+
This should be included where you build your `Rack` application. Usually `config.ru`:
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
# Most likely config.ru
|
68
|
+
|
69
|
+
Timber::RackMiddlewares.middlewares.each do |m|
|
70
|
+
use m
|
71
|
+
end
|
72
|
+
```
|
73
|
+
|
74
|
+
2. *Instantiate* the Timber logger:
|
75
|
+
|
76
|
+
This should be *globally* available to your application:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
logger = Timber::Logger.new(STDOUT)
|
80
|
+
```
|
70
81
|
|
71
82
|
---
|
72
83
|
|
73
84
|
</p></details>
|
74
85
|
|
75
|
-
<details><summary><strong>What events does Timber capture & structure for me?</strong></summary><p>
|
76
86
|
|
77
|
-
Out of the box you get everything in the [`Timber::Events`](lib/timber/events) namespace:
|
78
87
|
|
79
|
-
1. [Controller Call Event](lib/timber/events/controller_call.rb)
|
80
|
-
2. [Exception Event](lib/timber/events/exception.rb)
|
81
|
-
3. [HTTP Client Request Event (net/http outgoing)](lib/timber/events/http_client_request.rb)
|
82
|
-
4. [HTTP Client Response Event (resposne from net/http outgoing)](lib/timber/events/http_client_response.rb)
|
83
|
-
5. [HTTP Server Request Event (incoming client request)](lib/timber/events/http_server_request.rb)
|
84
|
-
6. [HTTP Server Response Event (response to incoming client request)](lib/timber/events/http_server_response.rb)
|
85
|
-
7. [SQL Query Event](lib/timber/events/sql_query.rb)
|
86
|
-
8. [Template Render Event](lib/timber/events/template_render.rb)
|
87
|
-
9. ...more coming soon, [file an issue](https://github.com/timberio/timber-ruby/issues) to request.
|
88
88
|
|
89
|
-
We also add context to every log, everything in the [`Timber::Contexts`](lib/timber/contexts)
|
90
|
-
namespace. Context is structured data representing the current environment when the log line was
|
91
|
-
written. It is included in every log line. Think of it like join data for your logs:
|
92
89
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
## Send your logs (choose one)
|
94
|
+
|
95
|
+
<details><summary><strong>Heroku (log drains)</strong></summary><p>
|
96
|
+
|
97
|
+
The recommended strategy for Heroku is to setup a
|
98
|
+
[log drain](https://devcenter.heroku.com/articles/log-drains). To get your Timber log drain URL:
|
99
|
+
|
100
|
+
👉 **[Add your app to Timber](https://app.timber.io)**
|
100
101
|
|
101
102
|
---
|
102
103
|
|
103
104
|
</p></details>
|
104
105
|
|
105
|
-
<details><summary><strong>
|
106
|
+
<details><summary><strong>All other platforms (Network / HTTP)</strong></summary><p>
|
106
107
|
|
107
|
-
|
108
|
-
and will never deviate in *any* way.
|
108
|
+
1. *Specify* the Timber Network logger backend in `config/environments/production.rb`:
|
109
109
|
|
110
|
-
|
111
|
-
|
110
|
+
Replace any existing `config.logger =` calls with:
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
# config/environments/production.rb (or staging, etc)
|
114
|
+
|
115
|
+
network_log_device = Timber::LogDevices::Network.new(ENV['TIMBER_LOGS_KEY'])
|
116
|
+
config.logger = Timber::Logger.new(network_log_device) # <-- Use network_log_device instead of STDOUT
|
117
|
+
```
|
118
|
+
|
119
|
+
2. Obtain your Timber API :key: by **[adding your app in Timber](https://app.timber.io)**.
|
120
|
+
|
121
|
+
3. Assign your API key to the `TIMBER_LOGS_KEY` environment variable.
|
112
122
|
|
113
123
|
</p></details>
|
114
124
|
|
125
|
+
<details><summary><strong>Advanced setup (syslog, file tailing agent, etc)</strong></summary><p>
|
126
|
+
|
127
|
+
Checkout our [docs](https://timber.io/docs) for a comprehensive list of install instructions.
|
128
|
+
|
129
|
+
</p></details>
|
130
|
+
|
131
|
+
|
115
132
|
## Usage
|
116
133
|
|
117
134
|
<details><summary><strong>Basic logging</strong></summary><p>
|
@@ -287,103 +304,84 @@ value.
|
|
287
304
|
</p></details>
|
288
305
|
|
289
306
|
|
307
|
+
## Jibber-Jabber
|
290
308
|
|
291
|
-
|
292
|
-
|
293
|
-
```ruby
|
294
|
-
# Gemfile
|
295
|
-
gem 'timber'
|
296
|
-
```
|
297
|
-
|
298
|
-
|
299
|
-
## Setup
|
300
|
-
|
301
|
-
<details><summary><strong>Rails (all versions, including edge)</strong></summary><p>
|
302
|
-
|
303
|
-
👉 **Prefer examples?** Checkout our the [Timber install example pull request](https://github.com/timberio/ruby-rails-example-app/pull/1/files)
|
304
|
-
|
305
|
-
---
|
306
|
-
|
307
|
-
*Replace* any existing `config.logger=` calls in `config/environments/production.rb` with:
|
308
|
-
|
309
|
-
```ruby
|
310
|
-
# config/environments/production.rb
|
309
|
+
<details><summary><strong>What specifically does the Timber library do?</strong></summary><p>
|
311
310
|
|
312
|
-
|
313
|
-
|
311
|
+
1. Captures and structures your framework and 3rd party logs. (see next question)
|
312
|
+
2. Adds useful context to every log line. (see next question)
|
313
|
+
3. Allows you to easily add tags and timings to log. (see [Usage](#usage))
|
314
|
+
4. Provides a framework for logging custom structured events. (see [Usage](#usage))
|
315
|
+
5. Offers transport strategies to [send your logs](#send-your-logs) to the Timber service.
|
314
316
|
|
315
317
|
---
|
316
318
|
|
317
319
|
</p></details>
|
318
320
|
|
319
|
-
<details><summary><strong>
|
320
|
-
|
321
|
-
1. *Insert* the Timber probes:
|
322
|
-
|
323
|
-
This should be executed *immediately after* you have required your dependencies.
|
324
|
-
|
325
|
-
```ruby
|
326
|
-
Timber::Probes.insert!
|
327
|
-
```
|
328
|
-
|
329
|
-
2. *Add* the Rack middlewares:
|
330
|
-
|
331
|
-
This should be included where you build your `Rack` application. Usually `config.ru`:
|
332
|
-
|
333
|
-
```ruby
|
334
|
-
# Most likely config.ru
|
335
|
-
|
336
|
-
Timber::RackMiddlewares.middlewares.each do |m|
|
337
|
-
use m
|
338
|
-
end
|
339
|
-
```
|
340
|
-
|
341
|
-
2. *Instantiate* the Timber logger:
|
321
|
+
<details><summary><strong>What are the benefits of using Timber?</strong></summary><p>
|
342
322
|
|
343
|
-
|
323
|
+
1. **Data quality.** The usefulness of your logs starts here. This is why we ship libraries that
|
324
|
+
structure logs from *within* your application; a fundamental difference from parsing. Not only
|
325
|
+
is it much more stable, but we can include data you couldn't obtain otherwise.
|
326
|
+
2. **Human readability.** Structuring your logs doesn't mean they have to be unreadable. Timber
|
327
|
+
*augments* your logs with structured data. Meaning we do not alter the original log message,
|
328
|
+
we simply attach metadata to it. And our console is specifically designed to give you access
|
329
|
+
to this data, without compromising readability. 😮
|
330
|
+
3. **Reliable downstream consumption.** All log events adhere to a
|
331
|
+
[normalized, shared, schema](https://github.com/timberio/log-event-json-schema) that follows
|
332
|
+
[semantic versioning](http://semver.org/) and goes through a [standard release process](https://github.com/timberio/log-event-json-schema/releases).
|
333
|
+
This means you can *rely* on the structure of your logs and interact consistently with them
|
334
|
+
across apps of any language: queries, graphs, alerts, and other downstream consumers.
|
335
|
+
4. **Zero risk of code debt or lock-in.** Logging is a standard that has been around since the dawn
|
336
|
+
of computers. It's built into every language, framework, and library. Timber adheres strictly
|
337
|
+
to the default `Logger` interface. There are no special APIs, and no need to pepper your app
|
338
|
+
with Timber specific code. It's just better logging. If you choose to stop using Timber, you
|
339
|
+
can do so without consequence.
|
340
|
+
5. **Long term retention.** Timber is designed on modern big-data principles. As a result, we can
|
341
|
+
offer 6+ months of retention at prices cheaper than alternatives offering <1 month.
|
342
|
+
This allows you to unlock your logs for purposes beyond debugging.
|
344
343
|
|
345
|
-
|
346
|
-
logger = Timber::Logger.new(STDOUT)
|
347
|
-
```
|
344
|
+
---
|
348
345
|
|
349
346
|
</p></details>
|
350
347
|
|
348
|
+
<details><summary><strong>What events does Timber capture & structure for me?</strong></summary><p>
|
351
349
|
|
352
|
-
|
350
|
+
Out of the box you get everything in the [`Timber::Events`](lib/timber/events) namespace:
|
353
351
|
|
354
|
-
|
352
|
+
1. [Controller Call Event](lib/timber/events/controller_call.rb)
|
353
|
+
2. [Exception Event](lib/timber/events/exception.rb)
|
354
|
+
3. [HTTP Client Request Event (net/http outgoing)](lib/timber/events/http_client_request.rb)
|
355
|
+
4. [HTTP Client Response Event (resposne from net/http outgoing)](lib/timber/events/http_client_response.rb)
|
356
|
+
5. [HTTP Server Request Event (incoming client request)](lib/timber/events/http_server_request.rb)
|
357
|
+
6. [HTTP Server Response Event (response to incoming client request)](lib/timber/events/http_server_response.rb)
|
358
|
+
7. [SQL Query Event](lib/timber/events/sql_query.rb)
|
359
|
+
8. [Template Render Event](lib/timber/events/template_render.rb)
|
360
|
+
9. ...more coming soon, [file an issue](https://github.com/timberio/timber-ruby/issues) to request.
|
355
361
|
|
356
|
-
|
357
|
-
|
362
|
+
We also add context to every log, everything in the [`Timber::Contexts`](lib/timber/contexts)
|
363
|
+
namespace. Context is structured data representing the current environment when the log line was
|
364
|
+
written. It is included in every log line. Think of it like join data for your logs:
|
358
365
|
|
359
|
-
|
366
|
+
1. [HTTP Context](lib/timber/contexts/http.rb)
|
367
|
+
2. [Organization Context](lib/timber/contexts/organization.rb)
|
368
|
+
3. [Process Context](lib/timber/contexts/process.rb)
|
369
|
+
4. [Server Context](lib/timber/contexts/server.rb)
|
370
|
+
5. [Runtime Context](lib/timber/contexts/runtime.rb)
|
371
|
+
5. [User Context](lib/timber/contexts/user.rb)
|
372
|
+
6. ...more coming soon, [file an issue](https://github.com/timberio/timber-ruby/issues) to request.
|
360
373
|
|
361
374
|
---
|
362
375
|
|
363
376
|
</p></details>
|
364
377
|
|
365
|
-
<details><summary><strong>
|
366
|
-
|
367
|
-
1. *Specify* the Timber Network logger backend in `config/environments/production.rb`:
|
368
|
-
|
369
|
-
Replace any existing `config.logger =` calls with:
|
370
|
-
|
371
|
-
```ruby
|
372
|
-
# config/environments/production.rb (or staging, etc)
|
373
|
-
|
374
|
-
network_log_device = Timber::LogDevices::Network.new(ENV['TIMBER_LOGS_KEY'])
|
375
|
-
config.logger = Timber::Logger.new(network_log_device) # <-- Use network_log_device instead of STDOUT
|
376
|
-
```
|
377
|
-
|
378
|
-
2. Obtain your Timber API :key: by **[adding your app in Timber](https://app.timber.io)**.
|
379
|
-
|
380
|
-
3. Assign your API key to the `TIMBER_LOGS_KEY` environment variable.
|
381
|
-
|
382
|
-
</p></details>
|
378
|
+
<details><summary><strong>What about my current log statements?</strong></summary><p>
|
383
379
|
|
384
|
-
|
380
|
+
They'll continue to work as expected. Timber adheres strictly to the default `::Logger` interface
|
381
|
+
and will never deviate in *any* way.
|
385
382
|
|
386
|
-
|
383
|
+
In fact, traditional log statements for non-meaningful events, debug statements, etc, are
|
384
|
+
encouraged. In cases where the data is meaningful, consider [logging a custom event](#usage).
|
387
385
|
|
388
386
|
</p></details>
|
389
387
|
|
data/lib/timber.rb
CHANGED
data/lib/timber/logger.rb
CHANGED
@@ -60,6 +60,7 @@ module Timber
|
|
60
60
|
# Logger.info PymentRejectedEvent.new("abcd1234", 100)
|
61
61
|
#
|
62
62
|
class Logger < ::Logger
|
63
|
+
|
63
64
|
# @private
|
64
65
|
class Formatter
|
65
66
|
# Formatters get the formatted level from the logger.
|
@@ -161,11 +162,19 @@ module Timber
|
|
161
162
|
# logger.formatter = Timber::Logger::JSONFormatter.new
|
162
163
|
def initialize(*args)
|
163
164
|
super(*args)
|
165
|
+
|
166
|
+
# Ensure we sync STDOUT to avoid buffering
|
167
|
+
if args.size == 1 and args.first.respond_to?(:"sync=")
|
168
|
+
args.first.sync = true
|
169
|
+
end
|
170
|
+
|
164
171
|
if args.size == 1 and args.first.is_a?(LogDevices::HTTP)
|
165
172
|
self.formatter = PassThroughFormatter.new
|
166
173
|
else
|
167
174
|
self.formatter = HybridFormatter.new
|
168
175
|
end
|
176
|
+
|
177
|
+
self.level = environment_level
|
169
178
|
end
|
170
179
|
|
171
180
|
def formatter=(value)
|
@@ -174,7 +183,13 @@ module Timber
|
|
174
183
|
"Timber::LogDevices::HTTP log device. The PassThroughFormatter must be used for proper " +
|
175
184
|
"delivery.")
|
176
185
|
end
|
177
|
-
|
186
|
+
|
187
|
+
if !value.is_a?(Timber::Logger::Formatter)
|
188
|
+
# silently discard this value since rails calls this during initialization :/
|
189
|
+
nil
|
190
|
+
else
|
191
|
+
super
|
192
|
+
end
|
178
193
|
end
|
179
194
|
|
180
195
|
# Backwards compatibility with older ActiveSupport::Logger versions
|
@@ -185,5 +200,11 @@ module Timber
|
|
185
200
|
end # end
|
186
201
|
EOT
|
187
202
|
end
|
203
|
+
|
204
|
+
private
|
205
|
+
def environment_level
|
206
|
+
level = ([ENV['LOG_LEVEL'].to_s.upcase, "DEBUG"] & %w[DEBUG INFO WARN ERROR FATAL UNKNOWN]).compact.first
|
207
|
+
self.class.const_get(level)
|
208
|
+
end
|
188
209
|
end
|
189
210
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# See https://github.com/heroku/rails_stdout_logging
|
2
|
+
# I have no idea why this library was created, but most Heroku / Rails apps use it.
|
3
|
+
# This library completely obliterates any logger configuration you set.
|
4
|
+
# So this patch fixes that.
|
5
|
+
|
6
|
+
begin
|
7
|
+
require "rails_stdout_logging"
|
8
|
+
|
9
|
+
module RailsStdoutLogging
|
10
|
+
class Rails2 < Rails
|
11
|
+
def self.set_logger
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Rails3 < Rails
|
16
|
+
def self.set_logger(config)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
rescue Exception
|
21
|
+
end
|
data/lib/timber/version.rb
CHANGED
data/spec/timber/logger_spec.rb
CHANGED
@@ -117,4 +117,19 @@ describe Timber::Logger, :rails_23 => true do
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
120
|
+
|
121
|
+
describe "#formatter=" do
|
122
|
+
let(:io) { StringIO.new }
|
123
|
+
let(:logger) { Timber::Logger.new(io) }
|
124
|
+
|
125
|
+
it "should not allow non Timber::Logger::Formatter formatters" do
|
126
|
+
logger.formatter = ::Logger::Formatter.new
|
127
|
+
expect(logger.formatter).to be_kind_of(::Timber::Logger::HybridFormatter)
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should allow Timber::Logger::Formatter formatters" do
|
131
|
+
logger.formatter = ::Timber::Logger::JSONFormatter.new
|
132
|
+
expect(logger.formatter).to be_kind_of(::Timber::Logger::JSONFormatter)
|
133
|
+
end
|
134
|
+
end
|
120
135
|
end
|
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.1.
|
4
|
+
version: 1.1.8
|
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-02-
|
11
|
+
date: 2017-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/timber/log_devices/http.rb
|
80
80
|
- lib/timber/log_entry.rb
|
81
81
|
- lib/timber/logger.rb
|
82
|
+
- lib/timber/overrides/rails_stdout_logging.rb
|
82
83
|
- lib/timber/probe.rb
|
83
84
|
- lib/timber/probes.rb
|
84
85
|
- lib/timber/probes/action_controller_log_subscriber.rb
|