timberio 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +34 -0
  3. data/.gitignore +14 -0
  4. data/Appraisals +37 -0
  5. data/Gemfile +22 -0
  6. data/LICENSE +38 -0
  7. data/README.md +22 -0
  8. data/Rakefile +4 -0
  9. data/TODO +4 -0
  10. data/benchmark/README.md +26 -0
  11. data/benchmark/rails_request.rb +68 -0
  12. data/benchmark/support/rails.rb +69 -0
  13. data/circle.yml +27 -0
  14. data/docs/installation/rails_on_heroku.md +31 -0
  15. data/docs/installation/rails_over_http.md +22 -0
  16. data/gemfiles/rails_3.0.X.gemfile +25 -0
  17. data/gemfiles/rails_3.1.X.gemfile +25 -0
  18. data/gemfiles/rails_3.2.X.gemfile +25 -0
  19. data/gemfiles/rails_4.0.X.gemfile +26 -0
  20. data/gemfiles/rails_4.1.X.gemfile +26 -0
  21. data/gemfiles/rails_4.2.X.gemfile +26 -0
  22. data/gemfiles/rails_5.0.X.gemfile +26 -0
  23. data/gemfiles/rails_edge.gemfile +27 -0
  24. data/lib/timber/api_settings.rb +17 -0
  25. data/lib/timber/bootstrap.rb +45 -0
  26. data/lib/timber/config.rb +25 -0
  27. data/lib/timber/context.rb +76 -0
  28. data/lib/timber/context_snapshot.rb +64 -0
  29. data/lib/timber/contexts/dynamic_values.rb +59 -0
  30. data/lib/timber/contexts/exception.rb +40 -0
  31. data/lib/timber/contexts/http_request.rb +22 -0
  32. data/lib/timber/contexts/http_requests/action_controller_specific.rb +48 -0
  33. data/lib/timber/contexts/http_requests/rack/params.rb +26 -0
  34. data/lib/timber/contexts/http_requests/rack.rb +105 -0
  35. data/lib/timber/contexts/http_response.rb +19 -0
  36. data/lib/timber/contexts/http_responses/action_controller.rb +76 -0
  37. data/lib/timber/contexts/logger.rb +33 -0
  38. data/lib/timber/contexts/organization.rb +33 -0
  39. data/lib/timber/contexts/organizations/action_controller.rb +34 -0
  40. data/lib/timber/contexts/server.rb +21 -0
  41. data/lib/timber/contexts/servers/heroku_specific.rb +48 -0
  42. data/lib/timber/contexts/sql_queries/active_record.rb +30 -0
  43. data/lib/timber/contexts/sql_queries/active_record_specific/binds.rb +37 -0
  44. data/lib/timber/contexts/sql_queries/active_record_specific.rb +59 -0
  45. data/lib/timber/contexts/sql_query.rb +18 -0
  46. data/lib/timber/contexts/template_render.rb +17 -0
  47. data/lib/timber/contexts/template_renders/action_view.rb +29 -0
  48. data/lib/timber/contexts/template_renders/action_view_specific.rb +51 -0
  49. data/lib/timber/contexts/user.rb +39 -0
  50. data/lib/timber/contexts/users/action_controller.rb +34 -0
  51. data/lib/timber/contexts.rb +23 -0
  52. data/lib/timber/current_context.rb +58 -0
  53. data/lib/timber/current_line_indexes.rb +35 -0
  54. data/lib/timber/frameworks/rails.rb +24 -0
  55. data/lib/timber/frameworks.rb +21 -0
  56. data/lib/timber/internal_logger.rb +35 -0
  57. data/lib/timber/log_device.rb +40 -0
  58. data/lib/timber/log_devices/heroku_logplex/hybrid_formatter.rb +14 -0
  59. data/lib/timber/log_devices/heroku_logplex.rb +14 -0
  60. data/lib/timber/log_devices/http/log_pile.rb +86 -0
  61. data/lib/timber/log_devices/http/log_truck/delivery.rb +116 -0
  62. data/lib/timber/log_devices/http/log_truck.rb +87 -0
  63. data/lib/timber/log_devices/http.rb +28 -0
  64. data/lib/timber/log_devices/io/formatter.rb +46 -0
  65. data/lib/timber/log_devices/io/hybrid_formatter.rb +41 -0
  66. data/lib/timber/log_devices/io/hybrid_hidden_formatter.rb +36 -0
  67. data/lib/timber/log_devices/io/json_formatter.rb +11 -0
  68. data/lib/timber/log_devices/io/logfmt_formatter.rb +11 -0
  69. data/lib/timber/log_devices/io.rb +41 -0
  70. data/lib/timber/log_devices.rb +4 -0
  71. data/lib/timber/log_line.rb +33 -0
  72. data/lib/timber/logger.rb +20 -0
  73. data/lib/timber/macros/compactor.rb +16 -0
  74. data/lib/timber/macros/date_formatter.rb +9 -0
  75. data/lib/timber/macros/deep_merger.rb +11 -0
  76. data/lib/timber/macros/logfmt_encoder.rb +77 -0
  77. data/lib/timber/macros.rb +4 -0
  78. data/lib/timber/patterns/delegated_singleton.rb +21 -0
  79. data/lib/timber/patterns/to_json.rb +22 -0
  80. data/lib/timber/patterns/to_logfmt.rb +9 -0
  81. data/lib/timber/patterns.rb +3 -0
  82. data/lib/timber/probe.rb +21 -0
  83. data/lib/timber/probes/action_controller_base.rb +31 -0
  84. data/lib/timber/probes/action_dispatch_debug_exceptions.rb +57 -0
  85. data/lib/timber/probes/active_support_log_subscriber/action_controller.rb +15 -0
  86. data/lib/timber/probes/active_support_log_subscriber/action_view.rb +26 -0
  87. data/lib/timber/probes/active_support_log_subscriber/active_record.rb +13 -0
  88. data/lib/timber/probes/active_support_log_subscriber.rb +62 -0
  89. data/lib/timber/probes/heroku.rb +30 -0
  90. data/lib/timber/probes/logger.rb +31 -0
  91. data/lib/timber/probes/rack.rb +36 -0
  92. data/lib/timber/probes/server.rb +18 -0
  93. data/lib/timber/probes.rb +24 -0
  94. data/lib/timber/version.rb +3 -0
  95. data/lib/timber.rb +27 -0
  96. data/spec/spec_helper.rb +27 -0
  97. data/spec/support/action_controller.rb +4 -0
  98. data/spec/support/action_view.rb +4 -0
  99. data/spec/support/active_record.rb +28 -0
  100. data/spec/support/coveralls.rb +2 -0
  101. data/spec/support/rails/templates/_partial.html +1 -0
  102. data/spec/support/rails/templates/template.html +1 -0
  103. data/spec/support/rails.rb +33 -0
  104. data/spec/support/simplecov.rb +9 -0
  105. data/spec/support/socket_hostname.rb +12 -0
  106. data/spec/support/timber.rb +23 -0
  107. data/spec/support/timecop.rb +3 -0
  108. data/spec/support/webmock.rb +2 -0
  109. data/spec/timber/bootstrap_spec.rb +31 -0
  110. data/spec/timber/context_snapshot_spec.rb +10 -0
  111. data/spec/timber/context_spec.rb +4 -0
  112. data/spec/timber/contexts/exception_spec.rb +34 -0
  113. data/spec/timber/contexts/organizations/action_controller_spec.rb +49 -0
  114. data/spec/timber/contexts/users/action_controller_spec.rb +65 -0
  115. data/spec/timber/current_line_indexes_spec.rb +40 -0
  116. data/spec/timber/frameworks/rails_spec.rb +9 -0
  117. data/spec/timber/log_devices/heroku_logplex_spec.rb +45 -0
  118. data/spec/timber/log_devices/http/log_truck/delivery_spec.rb +66 -0
  119. data/spec/timber/log_devices/http/log_truck_spec.rb +65 -0
  120. data/spec/timber/log_devices/io/hybrid_hidden_formatter_spec.rb +28 -0
  121. data/spec/timber/log_line_spec.rb +49 -0
  122. data/spec/timber/macros/compactor_spec.rb +19 -0
  123. data/spec/timber/macros/logfmt_encoder_spec.rb +89 -0
  124. data/spec/timber/patterns/to_json_spec.rb +40 -0
  125. data/spec/timber/probes/action_controller_base_spec.rb +43 -0
  126. data/spec/timber/probes/action_controller_log_subscriber/action_controller_spec.rb +35 -0
  127. data/spec/timber/probes/action_controller_log_subscriber/action_view_spec.rb +44 -0
  128. data/spec/timber/probes/action_controller_log_subscriber/active_record_spec.rb +26 -0
  129. data/spec/timber/probes/action_dispatch_debug_exceptions_spec.rb +45 -0
  130. data/spec/timber/probes/logger_spec.rb +20 -0
  131. data/spec/timber/probes/rack_spec.rb +26 -0
  132. data/timberio.gemspec +20 -0
  133. metadata +210 -0
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Patterns::ToJSON do
4
+ class TestJSON
5
+ include Timber::Patterns::ToJSON
6
+
7
+ attr_reader :json_payload
8
+
9
+ def initialize(json_payload)
10
+ @json_payload = json_payload
11
+ end
12
+ end
13
+
14
+ describe ".as_json" do
15
+ let(:hash) { {} }
16
+ let(:target) { TestJSON.new(hash) }
17
+ subject { target.as_json }
18
+ it { should eq({}) }
19
+
20
+ context "with a value" do
21
+ let(:hash) { {:test => 1} }
22
+ it { should eq({:test => 1}) }
23
+ end
24
+
25
+ context "with a nil value" do
26
+ let(:hash) { {:test => nil} }
27
+ it { should eq({}) }
28
+ end
29
+
30
+ context "with an empty array" do
31
+ let(:hash) { {:test => []} }
32
+ it { should eq({}) }
33
+ end
34
+
35
+ context "with an empty hash" do
36
+ let(:hash) { {:test => {}} }
37
+ it { should eq({}) }
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Probes::ActionControllerBase do
4
+ describe described_class::InstanceMethods do
5
+ before(:each) do
6
+ class PagesPlainController < ActionController::Base
7
+ layout nil
8
+
9
+ def index
10
+ render json: {}
11
+ end
12
+
13
+ def method_for_action(action_name)
14
+ action_name
15
+ end
16
+ end
17
+
18
+ ::RailsApp.routes.draw do
19
+ get 'pages_plain' => 'pages_plain#index'
20
+ end
21
+ end
22
+
23
+ after(:each) do
24
+ Object.send(:remove_const, :PagesPlainController)
25
+ end
26
+
27
+ let(:logger_context_class) { Timber::Contexts::Logger }
28
+ let(:rack_request_context_class) { Timber::Contexts::HTTPRequests::Rack }
29
+ let(:request_context_class) { Timber::Contexts::HTTPRequests::ActionControllerSpecific }
30
+ let(:organization_context_class) { Timber::Contexts::Organizations::ActionController }
31
+ let(:user_context_class) { Timber::Contexts::Users::ActionController }
32
+ let(:response_context_class) { Timber::Contexts::HTTPResponses::ActionController }
33
+
34
+ describe "#process" do
35
+ it "should set the context" do
36
+ allow(Timber::CurrentContext).to receive(:add).with(kind_of(logger_context_class))
37
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(rack_request_context_class)).and_yield.once
38
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(request_context_class), kind_of(organization_context_class), kind_of(user_context_class), kind_of(response_context_class)).and_yield.once
39
+ dispatch_rails_request("/pages_plain")
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,35 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Probes::ActiveSupportLogSubscriber::ActionController do
4
+ before(:each) do
5
+ class PagesController < ActionController::Base
6
+ layout nil
7
+
8
+ def index
9
+ response.headers['Content-Length'] = "500"
10
+ render json: {}
11
+ end
12
+
13
+ def method_for_action(action_name)
14
+ action_name
15
+ end
16
+ end
17
+
18
+ ::RailsApp.routes.draw do
19
+ get 'pages' => 'pages#index'
20
+ end
21
+ end
22
+
23
+ after(:each) do
24
+ Object.send(:remove_const, :PagesController)
25
+ end
26
+
27
+ let(:response_context_class) { Timber::Contexts::HTTPResponses::ActionController }
28
+
29
+ describe "#process_action" do
30
+ it "should set the context" do
31
+ expect_any_instance_of(response_context_class).to receive(:event=).with(kind_of(ActiveSupport::Notifications::Event)).once
32
+ dispatch_rails_request("/pages")
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,44 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Probes::ActiveSupportLogSubscriber::ActionView do
4
+ before(:each) do
5
+ class UsersController < ActionController::Base
6
+ layout nil
7
+
8
+ def index
9
+ render template: "template"
10
+ end
11
+
12
+ def method_for_action(action_name)
13
+ action_name
14
+ end
15
+ end
16
+
17
+ ::RailsApp.routes.draw do
18
+ get 'users' => 'users#index'
19
+ end
20
+ end
21
+
22
+ after(:each) do
23
+ Object.send(:remove_const, :UsersController)
24
+ end
25
+
26
+ let(:logger_context_class) { Timber::Contexts::Logger }
27
+ let(:rack_request_context_class) { Timber::Contexts::HTTPRequests::Rack }
28
+ let(:request_context_class) { Timber::Contexts::HTTPRequests::ActionControllerSpecific }
29
+ let(:organization_context_class) { Timber::Contexts::Organizations::ActionController }
30
+ let(:user_context_class) { Timber::Contexts::Users::ActionController }
31
+ let(:response_context_class) { Timber::Contexts::HTTPResponses::ActionController }
32
+ let(:action_view_context_class) { Timber::Contexts::TemplateRenders::ActionView }
33
+ let(:action_view_specific_context_class) { Timber::Contexts::TemplateRenders::ActionViewSpecific }
34
+
35
+ describe "#process_action" do
36
+ it "should set the context" do
37
+ allow(Timber::CurrentContext).to receive(:add).with(kind_of(logger_context_class))
38
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(rack_request_context_class)).and_yield.once
39
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(request_context_class), kind_of(organization_context_class), kind_of(user_context_class), kind_of(response_context_class)).and_yield.once
40
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(action_view_context_class), kind_of(action_view_specific_context_class)).and_yield.once
41
+ dispatch_rails_request("/users")
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,26 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Probes::ActiveSupportLogSubscriber::ActiveRecord do
4
+ before(:each) { Timber::Probes::ActiveSupportLogSubscriber.insert! }
5
+
6
+ let(:logger_context_class) { Timber::Contexts::Logger }
7
+ let(:active_record_context_class) { Timber::Contexts::SQLQueries::ActiveRecord }
8
+ let(:active_record_specific_context_class) { Timber::Contexts::SQLQueries::ActiveRecordSpecific }
9
+
10
+ describe "#sql" do
11
+ context "log level debug" do
12
+ before(:each) do
13
+ @old_level = ::ActiveRecord::Base.logger.level
14
+ ::ActiveRecord::Base.logger.level = Logger::DEBUG
15
+ end
16
+
17
+ after(:each) { ::ActiveRecord::Base.logger.level = @old_level }
18
+
19
+ it "should set the context" do
20
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(logger_context_class)).and_yield.once
21
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(active_record_context_class), kind_of(active_record_specific_context_class)).and_yield.once
22
+ ActiveRecord::Base.connection.execute("select * from users")
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Probes::ActionDispatchDebugExceptions do
4
+ describe described_class::InstanceMethods do
5
+ describe ".log_error" do
6
+ before(:each) do
7
+ class ExceptionController < ActionController::Base
8
+ layout nil
9
+
10
+ def index
11
+ raise "boom"
12
+ end
13
+
14
+ def method_for_action(action_name)
15
+ action_name
16
+ end
17
+ end
18
+
19
+ ::RailsApp.routes.draw do
20
+ get 'exception' => 'exception#index'
21
+ end
22
+ end
23
+
24
+ after(:each) do
25
+ Object.send(:remove_const, :ExceptionController)
26
+ end
27
+
28
+ let(:logger_context_class) { Timber::Contexts::Logger }
29
+ let(:rack_request_context_class) { Timber::Contexts::HTTPRequests::Rack }
30
+ let(:request_context_class) { Timber::Contexts::HTTPRequests::ActionControllerSpecific }
31
+ let(:organization_context_class) { Timber::Contexts::Organizations::ActionController }
32
+ let(:user_context_class) { Timber::Contexts::Users::ActionController }
33
+ let(:response_context_class) { Timber::Contexts::HTTPResponses::ActionController }
34
+ let(:exception_context_class) { Timber::Contexts::Exception }
35
+
36
+ it "should set the context" do
37
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(logger_context_class)).and_yield.at_least(:once)
38
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(rack_request_context_class)).and_yield.once
39
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(request_context_class), kind_of(organization_context_class), kind_of(user_context_class), kind_of(response_context_class)).and_yield.once
40
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(exception_context_class)).and_yield
41
+ dispatch_rails_request("/exception")
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Probes::Logger do
4
+ describe described_class::InstanceMethods do
5
+ describe ".add" do
6
+ let(:logger) { ::Logger.new(nil) }
7
+ let(:context_class) { Timber::Contexts::Logger }
8
+
9
+ it "should set the context" do
10
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(context_class)).and_yield.once
11
+ logger.info("test")
12
+ end
13
+
14
+ it "should ignore Config.logger" do
15
+ expect(Timber::CurrentContext).to_not receive(:add).with(kind_of(context_class))
16
+ Timber::Config.logger.info("text")
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Probes::Rack do
4
+ describe described_class::Middleware do
5
+ describe ".call" do
6
+ let(:app) do
7
+ Rack::Builder.new do
8
+ use Timber::Probes::Rack::Middleware
9
+ run lambda { |env|
10
+ [200, {'Content-Type' => 'text/plain'}, ['hello world']]
11
+ }
12
+ end
13
+ end
14
+ let(:context_class) { Timber::Contexts::HTTPRequests::Rack }
15
+
16
+ def request
17
+ Rack::MockRequest.new(app).get('/')
18
+ end
19
+
20
+ it "should set the context" do
21
+ expect(Timber::CurrentContext).to receive(:add).with(kind_of(context_class)).and_yield.once
22
+ request
23
+ end
24
+ end
25
+ end
26
+ end
data/timberio.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.push File.expand_path("../lib", __FILE__)
3
+ require "timber/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "timberio"
7
+ s.version = Timber::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Timber Technologies, Inc."]
10
+ s.email = ["hi@timber.io"]
11
+ s.homepage = "http://timber.io"
12
+ s.summary = 'Make logging useful again.'
13
+
14
+ s.required_ruby_version = '>= 1.9.0'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
metadata ADDED
@@ -0,0 +1,210 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: timberio
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta1
5
+ platform: ruby
6
+ authors:
7
+ - Timber Technologies, Inc.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - hi@timber.io
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".codeclimate.yml"
21
+ - ".gitignore"
22
+ - Appraisals
23
+ - Gemfile
24
+ - LICENSE
25
+ - README.md
26
+ - Rakefile
27
+ - TODO
28
+ - benchmark/README.md
29
+ - benchmark/rails_request.rb
30
+ - benchmark/support/rails.rb
31
+ - circle.yml
32
+ - docs/installation/rails_on_heroku.md
33
+ - docs/installation/rails_over_http.md
34
+ - gemfiles/rails_3.0.X.gemfile
35
+ - gemfiles/rails_3.1.X.gemfile
36
+ - gemfiles/rails_3.2.X.gemfile
37
+ - gemfiles/rails_4.0.X.gemfile
38
+ - gemfiles/rails_4.1.X.gemfile
39
+ - gemfiles/rails_4.2.X.gemfile
40
+ - gemfiles/rails_5.0.X.gemfile
41
+ - gemfiles/rails_edge.gemfile
42
+ - lib/timber.rb
43
+ - lib/timber/api_settings.rb
44
+ - lib/timber/bootstrap.rb
45
+ - lib/timber/config.rb
46
+ - lib/timber/context.rb
47
+ - lib/timber/context_snapshot.rb
48
+ - lib/timber/contexts.rb
49
+ - lib/timber/contexts/dynamic_values.rb
50
+ - lib/timber/contexts/exception.rb
51
+ - lib/timber/contexts/http_request.rb
52
+ - lib/timber/contexts/http_requests/action_controller_specific.rb
53
+ - lib/timber/contexts/http_requests/rack.rb
54
+ - lib/timber/contexts/http_requests/rack/params.rb
55
+ - lib/timber/contexts/http_response.rb
56
+ - lib/timber/contexts/http_responses/action_controller.rb
57
+ - lib/timber/contexts/logger.rb
58
+ - lib/timber/contexts/organization.rb
59
+ - lib/timber/contexts/organizations/action_controller.rb
60
+ - lib/timber/contexts/server.rb
61
+ - lib/timber/contexts/servers/heroku_specific.rb
62
+ - lib/timber/contexts/sql_queries/active_record.rb
63
+ - lib/timber/contexts/sql_queries/active_record_specific.rb
64
+ - lib/timber/contexts/sql_queries/active_record_specific/binds.rb
65
+ - lib/timber/contexts/sql_query.rb
66
+ - lib/timber/contexts/template_render.rb
67
+ - lib/timber/contexts/template_renders/action_view.rb
68
+ - lib/timber/contexts/template_renders/action_view_specific.rb
69
+ - lib/timber/contexts/user.rb
70
+ - lib/timber/contexts/users/action_controller.rb
71
+ - lib/timber/current_context.rb
72
+ - lib/timber/current_line_indexes.rb
73
+ - lib/timber/frameworks.rb
74
+ - lib/timber/frameworks/rails.rb
75
+ - lib/timber/internal_logger.rb
76
+ - lib/timber/log_device.rb
77
+ - lib/timber/log_devices.rb
78
+ - lib/timber/log_devices/heroku_logplex.rb
79
+ - lib/timber/log_devices/heroku_logplex/hybrid_formatter.rb
80
+ - lib/timber/log_devices/http.rb
81
+ - lib/timber/log_devices/http/log_pile.rb
82
+ - lib/timber/log_devices/http/log_truck.rb
83
+ - lib/timber/log_devices/http/log_truck/delivery.rb
84
+ - lib/timber/log_devices/io.rb
85
+ - lib/timber/log_devices/io/formatter.rb
86
+ - lib/timber/log_devices/io/hybrid_formatter.rb
87
+ - lib/timber/log_devices/io/hybrid_hidden_formatter.rb
88
+ - lib/timber/log_devices/io/json_formatter.rb
89
+ - lib/timber/log_devices/io/logfmt_formatter.rb
90
+ - lib/timber/log_line.rb
91
+ - lib/timber/logger.rb
92
+ - lib/timber/macros.rb
93
+ - lib/timber/macros/compactor.rb
94
+ - lib/timber/macros/date_formatter.rb
95
+ - lib/timber/macros/deep_merger.rb
96
+ - lib/timber/macros/logfmt_encoder.rb
97
+ - lib/timber/patterns.rb
98
+ - lib/timber/patterns/delegated_singleton.rb
99
+ - lib/timber/patterns/to_json.rb
100
+ - lib/timber/patterns/to_logfmt.rb
101
+ - lib/timber/probe.rb
102
+ - lib/timber/probes.rb
103
+ - lib/timber/probes/action_controller_base.rb
104
+ - lib/timber/probes/action_dispatch_debug_exceptions.rb
105
+ - lib/timber/probes/active_support_log_subscriber.rb
106
+ - lib/timber/probes/active_support_log_subscriber/action_controller.rb
107
+ - lib/timber/probes/active_support_log_subscriber/action_view.rb
108
+ - lib/timber/probes/active_support_log_subscriber/active_record.rb
109
+ - lib/timber/probes/heroku.rb
110
+ - lib/timber/probes/logger.rb
111
+ - lib/timber/probes/rack.rb
112
+ - lib/timber/probes/server.rb
113
+ - lib/timber/version.rb
114
+ - spec/spec_helper.rb
115
+ - spec/support/action_controller.rb
116
+ - spec/support/action_view.rb
117
+ - spec/support/active_record.rb
118
+ - spec/support/coveralls.rb
119
+ - spec/support/rails.rb
120
+ - spec/support/rails/templates/_partial.html
121
+ - spec/support/rails/templates/template.html
122
+ - spec/support/simplecov.rb
123
+ - spec/support/socket_hostname.rb
124
+ - spec/support/timber.rb
125
+ - spec/support/timecop.rb
126
+ - spec/support/webmock.rb
127
+ - spec/timber/bootstrap_spec.rb
128
+ - spec/timber/context_snapshot_spec.rb
129
+ - spec/timber/context_spec.rb
130
+ - spec/timber/contexts/exception_spec.rb
131
+ - spec/timber/contexts/organizations/action_controller_spec.rb
132
+ - spec/timber/contexts/users/action_controller_spec.rb
133
+ - spec/timber/current_line_indexes_spec.rb
134
+ - spec/timber/frameworks/rails_spec.rb
135
+ - spec/timber/log_devices/heroku_logplex_spec.rb
136
+ - spec/timber/log_devices/http/log_truck/delivery_spec.rb
137
+ - spec/timber/log_devices/http/log_truck_spec.rb
138
+ - spec/timber/log_devices/io/hybrid_hidden_formatter_spec.rb
139
+ - spec/timber/log_line_spec.rb
140
+ - spec/timber/macros/compactor_spec.rb
141
+ - spec/timber/macros/logfmt_encoder_spec.rb
142
+ - spec/timber/patterns/to_json_spec.rb
143
+ - spec/timber/probes/action_controller_base_spec.rb
144
+ - spec/timber/probes/action_controller_log_subscriber/action_controller_spec.rb
145
+ - spec/timber/probes/action_controller_log_subscriber/action_view_spec.rb
146
+ - spec/timber/probes/action_controller_log_subscriber/active_record_spec.rb
147
+ - spec/timber/probes/action_dispatch_debug_exceptions_spec.rb
148
+ - spec/timber/probes/logger_spec.rb
149
+ - spec/timber/probes/rack_spec.rb
150
+ - timberio.gemspec
151
+ homepage: http://timber.io
152
+ licenses: []
153
+ metadata: {}
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 1.9.0
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">"
166
+ - !ruby/object:Gem::Version
167
+ version: 1.3.1
168
+ requirements: []
169
+ rubyforge_project:
170
+ rubygems_version: 2.5.1
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: Make logging useful again.
174
+ test_files:
175
+ - spec/spec_helper.rb
176
+ - spec/support/action_controller.rb
177
+ - spec/support/action_view.rb
178
+ - spec/support/active_record.rb
179
+ - spec/support/coveralls.rb
180
+ - spec/support/rails.rb
181
+ - spec/support/rails/templates/_partial.html
182
+ - spec/support/rails/templates/template.html
183
+ - spec/support/simplecov.rb
184
+ - spec/support/socket_hostname.rb
185
+ - spec/support/timber.rb
186
+ - spec/support/timecop.rb
187
+ - spec/support/webmock.rb
188
+ - spec/timber/bootstrap_spec.rb
189
+ - spec/timber/context_snapshot_spec.rb
190
+ - spec/timber/context_spec.rb
191
+ - spec/timber/contexts/exception_spec.rb
192
+ - spec/timber/contexts/organizations/action_controller_spec.rb
193
+ - spec/timber/contexts/users/action_controller_spec.rb
194
+ - spec/timber/current_line_indexes_spec.rb
195
+ - spec/timber/frameworks/rails_spec.rb
196
+ - spec/timber/log_devices/heroku_logplex_spec.rb
197
+ - spec/timber/log_devices/http/log_truck/delivery_spec.rb
198
+ - spec/timber/log_devices/http/log_truck_spec.rb
199
+ - spec/timber/log_devices/io/hybrid_hidden_formatter_spec.rb
200
+ - spec/timber/log_line_spec.rb
201
+ - spec/timber/macros/compactor_spec.rb
202
+ - spec/timber/macros/logfmt_encoder_spec.rb
203
+ - spec/timber/patterns/to_json_spec.rb
204
+ - spec/timber/probes/action_controller_base_spec.rb
205
+ - spec/timber/probes/action_controller_log_subscriber/action_controller_spec.rb
206
+ - spec/timber/probes/action_controller_log_subscriber/action_view_spec.rb
207
+ - spec/timber/probes/action_controller_log_subscriber/active_record_spec.rb
208
+ - spec/timber/probes/action_dispatch_debug_exceptions_spec.rb
209
+ - spec/timber/probes/logger_spec.rb
210
+ - spec/timber/probes/rack_spec.rb