timber 2.6.2 → 3.0.0
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 +5 -5
- data/.travis.yml +8 -38
- data/CHANGELOG.md +9 -0
- data/README.md +30 -284
- data/Rakefile +78 -0
- data/lib/timber.rb +6 -6
- data/lib/timber/config.rb +1 -83
- data/lib/timber/config/integrations.rb +1 -47
- data/lib/timber/context.rb +3 -24
- data/lib/timber/contexts.rb +2 -30
- data/lib/timber/contexts/http.rb +16 -36
- data/lib/timber/contexts/release.rb +12 -23
- data/lib/timber/contexts/runtime.rb +9 -36
- data/lib/timber/contexts/session.rb +8 -21
- data/lib/timber/contexts/system.rb +9 -16
- data/lib/timber/contexts/user.rb +13 -33
- data/lib/timber/current_context.rb +16 -78
- data/lib/timber/event.rb +12 -9
- data/lib/timber/events.rb +1 -33
- data/lib/timber/events/controller_call.rb +20 -31
- data/lib/timber/events/error.rb +18 -26
- data/lib/timber/events/exception.rb +1 -0
- data/lib/timber/events/sql_query.rb +14 -24
- data/lib/timber/events/template_render.rb +13 -24
- data/lib/timber/integration.rb +1 -1
- data/lib/timber/integrator.rb +1 -1
- data/lib/timber/log_devices/http.rb +98 -19
- data/lib/timber/log_entry.rb +6 -24
- data/lib/timber/logger.rb +5 -14
- data/lib/timber/util.rb +1 -6
- data/lib/timber/util/non_nil_hash_builder.rb +3 -1
- data/lib/timber/version.rb +1 -1
- data/spec/README.md +2 -8
- data/spec/spec_helper.rb +0 -7
- data/spec/support/timber.rb +1 -3
- data/spec/timber/current_context_spec.rb +12 -50
- data/spec/timber/events/controller_call_spec.rb +4 -4
- data/spec/timber/events/error_spec.rb +4 -9
- data/spec/timber/log_devices/http_spec.rb +26 -2
- data/spec/timber/log_entry_spec.rb +12 -6
- data/spec/timber/logger_spec.rb +27 -68
- data/timber.gemspec +1 -1
- metadata +5 -139
- data/gemfiles/rails-3.0.gemfile +0 -5
- data/gemfiles/rails-3.1.gemfile +0 -5
- data/gemfiles/rails-3.2.gemfile +0 -5
- data/gemfiles/rails-4.0.gemfile +0 -9
- data/gemfiles/rails-4.1.gemfile +0 -9
- data/gemfiles/rails-4.2.gemfile +0 -9
- data/gemfiles/rails-5.0.gemfile +0 -9
- data/gemfiles/rails-5.1.gemfile +0 -9
- data/gemfiles/rails-edge.gemfile +0 -7
- data/lib/timber/cli.rb +0 -60
- data/lib/timber/cli/api.rb +0 -183
- data/lib/timber/cli/api/application.rb +0 -34
- data/lib/timber/cli/config_file.rb +0 -71
- data/lib/timber/cli/file_helper.rb +0 -53
- data/lib/timber/cli/installer.rb +0 -70
- data/lib/timber/cli/installers.rb +0 -102
- data/lib/timber/cli/installers/config_file.rb +0 -51
- data/lib/timber/cli/installers/other.rb +0 -59
- data/lib/timber/cli/installers/rails.rb +0 -225
- data/lib/timber/cli/installers/root.rb +0 -116
- data/lib/timber/cli/io.rb +0 -100
- data/lib/timber/cli/io/ansi.rb +0 -22
- data/lib/timber/cli/io/messages.rb +0 -198
- data/lib/timber/cli/os_helper.rb +0 -74
- data/lib/timber/config/integrations/rack.rb +0 -74
- data/lib/timber/contexts/custom.rb +0 -44
- data/lib/timber/contexts/organization.rb +0 -48
- data/lib/timber/events/custom.rb +0 -53
- data/lib/timber/events/http_request.rb +0 -71
- data/lib/timber/events/http_response.rb +0 -81
- data/lib/timber/frameworks.rb +0 -19
- data/lib/timber/frameworks/rails.rb +0 -27
- data/lib/timber/integrations.rb +0 -29
- data/lib/timber/integrations/action_controller.rb +0 -18
- data/lib/timber/integrations/action_controller/log_subscriber.rb +0 -27
- data/lib/timber/integrations/action_controller/log_subscriber/timber_log_subscriber.rb +0 -46
- data/lib/timber/integrations/action_dispatch.rb +0 -23
- data/lib/timber/integrations/action_dispatch/debug_exceptions.rb +0 -53
- data/lib/timber/integrations/action_view.rb +0 -18
- data/lib/timber/integrations/action_view/log_subscriber.rb +0 -27
- data/lib/timber/integrations/action_view/log_subscriber/timber_log_subscriber.rb +0 -83
- data/lib/timber/integrations/active_record.rb +0 -18
- data/lib/timber/integrations/active_record/log_subscriber.rb +0 -26
- data/lib/timber/integrations/active_record/log_subscriber/timber_log_subscriber.rb +0 -53
- data/lib/timber/integrations/rack.rb +0 -27
- data/lib/timber/integrations/rack/error_event.rb +0 -64
- data/lib/timber/integrations/rack/http_context.rb +0 -27
- data/lib/timber/integrations/rack/http_events.rb +0 -210
- data/lib/timber/integrations/rack/middleware.rb +0 -28
- data/lib/timber/integrations/rack/session_context.rb +0 -65
- data/lib/timber/integrations/rack/user_context.rb +0 -135
- data/lib/timber/integrations/rails.rb +0 -22
- data/lib/timber/integrations/rails/rack_logger.rb +0 -60
- data/lib/timber/overrides.rb +0 -12
- data/lib/timber/overrides/active_support_3_tagged_logging.rb +0 -111
- data/lib/timber/overrides/active_support_buffered_logger.rb +0 -22
- data/lib/timber/overrides/active_support_tagged_logging.rb +0 -66
- data/lib/timber/overrides/lograge.rb +0 -18
- data/lib/timber/overrides/rails_stdout_logging.rb +0 -21
- data/lib/timber/util/active_support_log_subscriber.rb +0 -37
- data/lib/timber/util/attribute_normalizer.rb +0 -89
- data/lib/timber/util/hash.rb +0 -90
- data/lib/timber/util/request.rb +0 -72
- data/lib/timber/util/struct.rb +0 -16
- data/spec/rails/tagged_logging_spec.rb +0 -44
- data/spec/support/action_controller.rb +0 -8
- data/spec/support/active_record.rb +0 -32
- data/spec/support/rails.rb +0 -67
- data/spec/support/rails/templates/_partial.html +0 -1
- data/spec/support/rails/templates/template.html +0 -1
- data/spec/timber/cli/config_file_spec.rb +0 -26
- data/spec/timber/cli/installers/config_file_spec.rb +0 -36
- data/spec/timber/cli/installers/other_spec.rb +0 -49
- data/spec/timber/cli/installers/rails_spec.rb +0 -364
- data/spec/timber/cli/installers/root_spec.rb +0 -73
- data/spec/timber/config_spec.rb +0 -28
- data/spec/timber/contexts/custom_spec.rb +0 -11
- data/spec/timber/contexts/organization_spec.rb +0 -11
- data/spec/timber/contexts/runtime_spec.rb +0 -11
- data/spec/timber/contexts/system_spec.rb +0 -11
- data/spec/timber/contexts/user_spec.rb +0 -11
- data/spec/timber/contexts_spec.rb +0 -49
- data/spec/timber/event_spec.rb +0 -10
- data/spec/timber/events/custom_spec.rb +0 -36
- data/spec/timber/events/http_request_spec.rb +0 -32
- data/spec/timber/events/http_response_spec.rb +0 -12
- data/spec/timber/events_spec.rb +0 -55
- data/spec/timber/integrations/action_controller/log_subscriber_spec.rb +0 -55
- data/spec/timber/integrations/action_dispatch/debug_exceptions_spec.rb +0 -53
- data/spec/timber/integrations/action_view/log_subscriber_spec.rb +0 -115
- data/spec/timber/integrations/active_record/log_subscriber_spec.rb +0 -46
- data/spec/timber/integrations/rack/error_event_spec.rb +0 -63
- data/spec/timber/integrations/rack/http_context_spec.rb +0 -60
- data/spec/timber/integrations/rack/http_events_spec.rb +0 -101
- data/spec/timber/integrations/rack/session_context_spec.rb +0 -62
- data/spec/timber/integrations/rails/rack_logger_spec.rb +0 -58
- data/spec/timber/util/attribute_normalizer_spec.rb +0 -90
- data/spec/timber/util/hash_spec.rb +0 -30
- data/spec/timber/util/request_spec.rb +0 -10
@@ -1,71 +0,0 @@
|
|
1
|
-
require "timber/event"
|
2
|
-
require "timber/util"
|
3
|
-
|
4
|
-
module Timber
|
5
|
-
module Events
|
6
|
-
# The HTTP server request event tracks incoming HTTP requests to your HTTP server.
|
7
|
-
# Such as unicorn, webrick, puma, etc.
|
8
|
-
#
|
9
|
-
# @note This event should be installed automatically through integrations,
|
10
|
-
# such as the {Integrations::ActionController::LogSubscriber} integration.
|
11
|
-
class HTTPRequest < Timber::Event
|
12
|
-
BODY_MAX_BYTES = 8192.freeze
|
13
|
-
HEADERS_JSON_MAX_BYTES = 8192.freeze
|
14
|
-
HEADERS_TO_SANITIZE = ['authorization', 'x-amz-security-token'].freeze
|
15
|
-
HOST_MAX_BYTES = 256.freeze
|
16
|
-
METHOD_MAX_BYTES = 20.freeze
|
17
|
-
PATH_MAX_BYTES = 2048.freeze
|
18
|
-
QUERY_STRING_MAX_BYTES = 2048.freeze
|
19
|
-
REQUEST_ID_MAX_BYTES = 256.freeze
|
20
|
-
SCHEME_MAX_BYTES = 20.freeze
|
21
|
-
SERVICE_NAME_MAX_BYTES = 256.freeze
|
22
|
-
|
23
|
-
attr_reader :body, :content_length, :headers, :host, :method, :path, :port, :query_string,
|
24
|
-
:request_id, :scheme, :service_name
|
25
|
-
|
26
|
-
def initialize(attributes)
|
27
|
-
normalizer = Util::AttributeNormalizer.new(attributes)
|
28
|
-
body_limit = Config.instance.http_body_limit || BODY_MAX_BYTES
|
29
|
-
headers_to_sanitize = HEADERS_TO_SANITIZE + (Config.instance.http_header_filters || [])
|
30
|
-
|
31
|
-
@body = normalizer.fetch(:body, :string, :limit => body_limit)
|
32
|
-
@content_length = normalizer.fetch(:content_length, :integer)
|
33
|
-
@headers = normalizer.fetch(:headers, :hash, :sanitize => headers_to_sanitize)
|
34
|
-
@host = normalizer.fetch(:host, :string, :limit => HOST_MAX_BYTES)
|
35
|
-
@method = normalizer.fetch!(:method, :string, :upcase => true, :limit => METHOD_MAX_BYTES)
|
36
|
-
@path = normalizer.fetch(:path, :string, :limit => PATH_MAX_BYTES)
|
37
|
-
@port = normalizer.fetch(:port, :integer)
|
38
|
-
@query_string = normalizer.fetch(:query_string, :string, :limit => QUERY_STRING_MAX_BYTES)
|
39
|
-
@scheme = normalizer.fetch(:scheme, :string, :limit => SCHEME_MAX_BYTES)
|
40
|
-
@request_id = normalizer.fetch(:request_id, :string, :limit => REQUEST_ID_MAX_BYTES)
|
41
|
-
@service_name = normalizer.fetch(:service_name, :string, :limit => SERVICE_NAME_MAX_BYTES)
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_hash
|
45
|
-
@to_hash ||= Util::NonNilHashBuilder.build do |h|
|
46
|
-
h.add(:body, body)
|
47
|
-
h.add(:content_length, content_length)
|
48
|
-
h.add(:headers_json, headers, :json_encode => true, :limit => HEADERS_JSON_MAX_BYTES)
|
49
|
-
h.add(:host, host)
|
50
|
-
h.add(:method, method)
|
51
|
-
h.add(:path, path)
|
52
|
-
h.add(:port, port)
|
53
|
-
h.add(:query_string, query_string)
|
54
|
-
h.add(:request_id, request_id)
|
55
|
-
h.add(:scheme, scheme)
|
56
|
-
h.add(:service_name, service_name)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
alias to_h to_hash
|
60
|
-
|
61
|
-
# Builds a hash representation containing simple objects, suitable for serialization (JSON).
|
62
|
-
def as_json(_options = {})
|
63
|
-
{:http_request => to_hash}
|
64
|
-
end
|
65
|
-
|
66
|
-
def message
|
67
|
-
'Started %s "%s"' % [method, path]
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
require "timber/event"
|
2
|
-
require "timber/util"
|
3
|
-
|
4
|
-
module Timber
|
5
|
-
module Events
|
6
|
-
# The HTTP server response event tracks outgoing HTTP responses that you send
|
7
|
-
# to clients.
|
8
|
-
#
|
9
|
-
# @note This event should be installed automatically through integrations,
|
10
|
-
# such as the {Integrations::ActionController::LogSubscriber} integration.
|
11
|
-
class HTTPResponse < Timber::Event
|
12
|
-
BODY_MAX_BYTES = 8192.freeze
|
13
|
-
HEADERS_JSON_MAX_BYTES = 256.freeze
|
14
|
-
HEADERS_TO_SANITIZE = ['authorization', 'x-amz-security-token'].freeze
|
15
|
-
REQUEST_ID_MAX_BYTES = 256.freeze
|
16
|
-
SERVICE_NAME_MAX_BYTES = 256.freeze
|
17
|
-
|
18
|
-
attr_reader :body, :content_length, :headers, :http_context, :request_id, :service_name,
|
19
|
-
:status, :time_ms
|
20
|
-
|
21
|
-
def initialize(attributes)
|
22
|
-
normalizer = Util::AttributeNormalizer.new(attributes)
|
23
|
-
body_limit = Config.instance.http_body_limit || BODY_MAX_BYTES
|
24
|
-
headers_to_sanitize = HEADERS_TO_SANITIZE + (Config.instance.http_header_filters || [])
|
25
|
-
|
26
|
-
@body = normalizer.fetch(:body, :string, :limit => body_limit)
|
27
|
-
@content_length = normalizer.fetch(:content_length, :integer)
|
28
|
-
@headers = normalizer.fetch(:headers, :hash, :sanitize => headers_to_sanitize)
|
29
|
-
@http_context = attributes[:http_context]
|
30
|
-
@request_id = normalizer.fetch(:request_id, :string, :limit => REQUEST_ID_MAX_BYTES)
|
31
|
-
@service_name = normalizer.fetch(:service_name, :string, :limit => SERVICE_NAME_MAX_BYTES)
|
32
|
-
@status = normalizer.fetch!(:status, :integer)
|
33
|
-
@time_ms = normalizer.fetch!(:time_ms, :float, :precision => 6)
|
34
|
-
end
|
35
|
-
|
36
|
-
def to_hash
|
37
|
-
@to_hash ||= Util::NonNilHashBuilder.build do |h|
|
38
|
-
h.add(:body, body)
|
39
|
-
h.add(:content_length, content_length)
|
40
|
-
h.add(:headers_json, headers, :json_encode => true, :limit => HEADERS_JSON_MAX_BYTES)
|
41
|
-
h.add(:request_id, request_id)
|
42
|
-
h.add(:service_name, service_name)
|
43
|
-
h.add(:status, status)
|
44
|
-
h.add(:time_ms, time_ms)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
alias to_h to_hash
|
48
|
-
|
49
|
-
# Builds a hash representation containing simple objects, suitable for serialization (JSON).
|
50
|
-
def as_json(_options = {})
|
51
|
-
{:http_response => to_hash}
|
52
|
-
end
|
53
|
-
|
54
|
-
# Returns the human readable log message for this event.
|
55
|
-
def message
|
56
|
-
if http_context
|
57
|
-
message = "#{http_context[:method]} #{http_context[:path]} completed with " \
|
58
|
-
"#{status} #{status_description} "
|
59
|
-
|
60
|
-
if content_length
|
61
|
-
message << ", #{content_length} bytes, "
|
62
|
-
end
|
63
|
-
|
64
|
-
message << "in #{time_ms}ms"
|
65
|
-
else
|
66
|
-
message = "Completed #{status} #{status_description} "
|
67
|
-
|
68
|
-
if content_length
|
69
|
-
message << ", #{content_length} bytes, "
|
70
|
-
end
|
71
|
-
|
72
|
-
message << "in #{time_ms}ms"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def status_description
|
77
|
-
Rack::Utils::HTTP_STATUS_CODES[status]
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
data/lib/timber/frameworks.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require "logger"
|
2
|
-
|
3
|
-
# Attempt to require Rails. We can not list it as a gem
|
4
|
-
# dependency because we want to support multiple frameworks.
|
5
|
-
begin
|
6
|
-
require "rails"
|
7
|
-
rescue LoadError
|
8
|
-
end
|
9
|
-
|
10
|
-
if defined?(::Rails) && defined?(::Rails::Railtie)
|
11
|
-
require "timber/frameworks/rails"
|
12
|
-
end
|
13
|
-
|
14
|
-
module Timber
|
15
|
-
# Namespace for installing Timber into frameworks
|
16
|
-
# @private
|
17
|
-
module Frameworks
|
18
|
-
end
|
19
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Timber
|
2
|
-
module Frameworks
|
3
|
-
# Module for Rails specific code, such as the Railtie and any methods that assist
|
4
|
-
# with Rails setup.
|
5
|
-
module Rails
|
6
|
-
# Installs Timber into your Rails app automatically.
|
7
|
-
class Railtie < ::Rails::Railtie
|
8
|
-
config.timber = Config.instance
|
9
|
-
|
10
|
-
config.before_initialize do
|
11
|
-
Timber::Config.instance.logger = Proc.new { ::Rails.logger }
|
12
|
-
end
|
13
|
-
|
14
|
-
# Must be loaded after initializers so that we respect any Timber configuration set
|
15
|
-
initializer(:timber, before: :build_middleware_stack, after: :load_config_initializers) do
|
16
|
-
Integrations.integrate!
|
17
|
-
|
18
|
-
# Install the Rack middlewares so that we capture structured data instead of
|
19
|
-
# raw text logs.
|
20
|
-
Integrations::Rack.middlewares.collect do |middleware_class|
|
21
|
-
config.app_middleware.use middleware_class
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/timber/integrations.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require "timber/integrations/action_controller"
|
2
|
-
require "timber/integrations/action_dispatch"
|
3
|
-
require "timber/integrations/action_view"
|
4
|
-
require "timber/integrations/active_record"
|
5
|
-
require "timber/integrations/rack"
|
6
|
-
require "timber/integrations/rails"
|
7
|
-
|
8
|
-
module Timber
|
9
|
-
# Namespace for all integrations. Each integration provides it's own settings.
|
10
|
-
# And all integrations can be disabled with the {.enabled=} class method.
|
11
|
-
module Integrations
|
12
|
-
# Disable / enable _all_ integrations with one setting.
|
13
|
-
def self.enabled=(value)
|
14
|
-
ActionController.enabled = value
|
15
|
-
ActionView.enabled = value
|
16
|
-
ActiveRecord.enabled = value
|
17
|
-
Rack.enabled = value
|
18
|
-
end
|
19
|
-
|
20
|
-
# Integrates all enabled integrations in one call.
|
21
|
-
def self.integrate!
|
22
|
-
ActionController.integrate!
|
23
|
-
ActionDispatch.integrate!
|
24
|
-
ActionView.integrate!
|
25
|
-
ActiveRecord.integrate!
|
26
|
-
Rails.integrate!
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "timber/integration"
|
2
|
-
require "timber/integrations/action_controller/log_subscriber"
|
3
|
-
|
4
|
-
module Timber
|
5
|
-
module Integrations
|
6
|
-
# Module for holding *all* ActionController integrations. See {Integration} for
|
7
|
-
# configuration details for all integrations.
|
8
|
-
module ActionController
|
9
|
-
extend Integration
|
10
|
-
|
11
|
-
def self.integrate!
|
12
|
-
return false if !enabled?
|
13
|
-
|
14
|
-
LogSubscriber.integrate!
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "timber/integrator"
|
2
|
-
|
3
|
-
module Timber
|
4
|
-
module Integrations
|
5
|
-
module ActionController
|
6
|
-
# Responsible for removing the default ActionController::LogSubscriber and installing
|
7
|
-
# the TimberLogSubscriber
|
8
|
-
#
|
9
|
-
# @private
|
10
|
-
class LogSubscriber < Integrator
|
11
|
-
def initialize
|
12
|
-
require "action_controller/log_subscriber"
|
13
|
-
require "timber/integrations/action_controller/log_subscriber/timber_log_subscriber"
|
14
|
-
rescue LoadError => e
|
15
|
-
raise RequirementNotMetError.new(e.message)
|
16
|
-
end
|
17
|
-
|
18
|
-
def integrate!
|
19
|
-
return true if Util::ActiveSupportLogSubscriber.subscribed?(:action_controller, TimberLogSubscriber)
|
20
|
-
|
21
|
-
Util::ActiveSupportLogSubscriber.unsubscribe!(:action_controller, ::ActionController::LogSubscriber)
|
22
|
-
TimberLogSubscriber.attach_to(:action_controller)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Timber
|
2
|
-
module Integrations
|
3
|
-
module ActionController
|
4
|
-
class LogSubscriber < Integrator
|
5
|
-
# The log subscriber that replaces the default `ActionController::LogSubscriber`.
|
6
|
-
# The intent of this subscriber is to, as transparently as possible, properly
|
7
|
-
# track events that are being logged here. This LogSubscriber will never change
|
8
|
-
# default behavior / log messages.
|
9
|
-
#
|
10
|
-
# @private
|
11
|
-
class TimberLogSubscriber < ::ActionController::LogSubscriber
|
12
|
-
def start_processing(event)
|
13
|
-
return true if silence?
|
14
|
-
|
15
|
-
info do
|
16
|
-
payload = event.payload
|
17
|
-
params = payload[:params].except(*INTERNAL_PARAMS)
|
18
|
-
format = extract_format(payload)
|
19
|
-
format = format.to_s.upcase if format.is_a?(Symbol)
|
20
|
-
|
21
|
-
Events::ControllerCall.new(
|
22
|
-
controller: payload[:controller],
|
23
|
-
action: payload[:action],
|
24
|
-
format: format,
|
25
|
-
params: params
|
26
|
-
)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def extract_format(payload)
|
32
|
-
if payload.key?(:format)
|
33
|
-
payload[:format] # rails > 4.X
|
34
|
-
elsif payload.key?(:formats)
|
35
|
-
payload[:formats].first # rails 3.X
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def silence?
|
40
|
-
ActionController.silence?
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require "timber/integration"
|
2
|
-
require "timber/integrations/rack/error_event"
|
3
|
-
require "timber/integrations/action_dispatch/debug_exceptions"
|
4
|
-
|
5
|
-
module Timber
|
6
|
-
module Integrations
|
7
|
-
# Module for holding *all* ActionDispatch integrations. This module does *not*
|
8
|
-
# extend {Integration} because it's dependent on {Rack::ExceptionEvent}. This
|
9
|
-
# module simply disables the exception tracking middleware so that our middleware
|
10
|
-
# works as expected.
|
11
|
-
module ActionDispatch
|
12
|
-
def self.enabled?
|
13
|
-
Rack::ErrorEvent.enabled?
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.integrate!
|
17
|
-
return false if !enabled?
|
18
|
-
|
19
|
-
DebugExceptions.integrate!
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "timber/integrator"
|
2
|
-
|
3
|
-
module Timber
|
4
|
-
module Integrations
|
5
|
-
module ActionDispatch
|
6
|
-
# Reponsible for disabled logging in the ActionDispatch::DebugExceptions
|
7
|
-
# Rack middleware. We cannot simply remove the middleware because it is
|
8
|
-
# coupled with displaying an exception debug screen if debug exceptions is enabled.
|
9
|
-
#
|
10
|
-
# @private
|
11
|
-
class DebugExceptions < Integrator
|
12
|
-
|
13
|
-
# Patch for disabling logging
|
14
|
-
#
|
15
|
-
# @private
|
16
|
-
module InstanceMethods
|
17
|
-
def self.included(klass)
|
18
|
-
klass.class_eval do
|
19
|
-
private
|
20
|
-
def logger(*args)
|
21
|
-
nil
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def initialize
|
28
|
-
begin
|
29
|
-
# Rails >= 3.1
|
30
|
-
require "action_dispatch/middleware/debug_exceptions"
|
31
|
-
rescue LoadError
|
32
|
-
# Rails < 3.1
|
33
|
-
require "action_dispatch/middleware/show_exceptions"
|
34
|
-
end
|
35
|
-
rescue LoadError => e
|
36
|
-
raise RequirementNotMetError.new(e.message)
|
37
|
-
end
|
38
|
-
|
39
|
-
def integrate!
|
40
|
-
if defined?(::ActionDispatch::DebugExceptions) && !::ActionDispatch::DebugExceptions.include?(InstanceMethods)
|
41
|
-
::ActionDispatch::DebugExceptions.send(:include, InstanceMethods)
|
42
|
-
end
|
43
|
-
|
44
|
-
if defined?(::ActionDispatch::ShowExceptions) && !::ActionDispatch::ShowExceptions.include?(InstanceMethods)
|
45
|
-
::ActionDispatch::ShowExceptions.send(:include, InstanceMethods)
|
46
|
-
end
|
47
|
-
|
48
|
-
true
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "timber/integration"
|
2
|
-
require "timber/integrations/action_view/log_subscriber"
|
3
|
-
|
4
|
-
module Timber
|
5
|
-
module Integrations
|
6
|
-
# Module for holding *all* ActionView integrations. See {Integration} for
|
7
|
-
# configuration details for all integrations.
|
8
|
-
module ActionView
|
9
|
-
extend Integration
|
10
|
-
|
11
|
-
def self.integrate!
|
12
|
-
return false if !enabled?
|
13
|
-
|
14
|
-
LogSubscriber.integrate!
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "timber/integrator"
|
2
|
-
|
3
|
-
module Timber
|
4
|
-
module Integrations
|
5
|
-
module ActionView
|
6
|
-
# Reponsible for uninstalling the default `ActionView::LogSubscriber` and installing
|
7
|
-
# the TimberLogSubscriber.
|
8
|
-
#
|
9
|
-
# @private
|
10
|
-
class LogSubscriber < Integrator
|
11
|
-
def initialize
|
12
|
-
require "action_view/log_subscriber"
|
13
|
-
require "timber/integrations/action_view/log_subscriber/timber_log_subscriber"
|
14
|
-
rescue LoadError => e
|
15
|
-
raise RequirementNotMetError.new(e.message)
|
16
|
-
end
|
17
|
-
|
18
|
-
def integrate!
|
19
|
-
return true if Util::ActiveSupportLogSubscriber.subscribed?(:action_view, TimberLogSubscriber)
|
20
|
-
|
21
|
-
Util::ActiveSupportLogSubscriber.unsubscribe!(:action_view, ::ActionView::LogSubscriber)
|
22
|
-
TimberLogSubscriber.attach_to(:action_view)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|