rails_semantic_logger 4.1.3 → 4.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +17 -10
  3. data/Rakefile +9 -9
  4. data/lib/rails_semantic_logger/action_controller/log_subscriber.rb +125 -0
  5. data/lib/rails_semantic_logger/action_mailer/log_subscriber.rb +135 -0
  6. data/lib/rails_semantic_logger/action_view/log_subscriber.rb +111 -0
  7. data/lib/rails_semantic_logger/active_job/log_subscriber.rb +126 -0
  8. data/lib/rails_semantic_logger/active_record/log_subscriber.rb +218 -0
  9. data/lib/rails_semantic_logger/delayed_job/plugin.rb +11 -0
  10. data/lib/rails_semantic_logger/engine.rb +189 -194
  11. data/lib/rails_semantic_logger/extensions/action_cable/tagged_logger_proxy.rb +1 -1
  12. data/lib/rails_semantic_logger/extensions/action_controller/live.rb +8 -4
  13. data/lib/rails_semantic_logger/extensions/action_dispatch/debug_exceptions.rb +11 -7
  14. data/lib/rails_semantic_logger/extensions/action_view/streaming_template_renderer.rb +10 -6
  15. data/lib/rails_semantic_logger/extensions/active_job/logging.rb +10 -6
  16. data/lib/rails_semantic_logger/extensions/active_model_serializers/logging.rb +12 -9
  17. data/lib/rails_semantic_logger/extensions/active_support/logger.rb +24 -0
  18. data/lib/rails_semantic_logger/extensions/active_support/tagged_logging.rb +8 -0
  19. data/lib/rails_semantic_logger/extensions/mongoid/config.rb +11 -0
  20. data/lib/rails_semantic_logger/extensions/rack/server.rb +12 -0
  21. data/lib/rails_semantic_logger/extensions/rails/server.rb +9 -5
  22. data/lib/rails_semantic_logger/options.rb +122 -0
  23. data/lib/rails_semantic_logger/rack/logger.rb +100 -0
  24. data/lib/rails_semantic_logger/version.rb +2 -2
  25. data/lib/rails_semantic_logger.rb +58 -3
  26. metadata +46 -24
  27. data/lib/rails_semantic_logger/extensions/action_controller/log_subscriber.rb +0 -107
  28. data/lib/rails_semantic_logger/extensions/action_controller/log_subscriber_processing.rb +0 -28
  29. data/lib/rails_semantic_logger/extensions/action_view/log_subscriber.rb +0 -12
  30. data/lib/rails_semantic_logger/extensions/active_record/log_subscriber.rb +0 -44
  31. data/lib/rails_semantic_logger/extensions/rails/rack/logger.rb +0 -63
  32. data/lib/rails_semantic_logger/extensions/rails/rack/logger_info_as_debug.rb +0 -30
@@ -1,107 +0,0 @@
1
- require 'action_controller/log_subscriber'
2
- ActionController::LogSubscriber
3
-
4
- module ActionController
5
- class LogSubscriber
6
- # Log as debug to hide Processing messages in production
7
- def start_processing(event)
8
- controller_logger(event).debug { "Processing ##{event.payload[:action]}" }
9
- end
10
-
11
- def process_action(event)
12
- controller_logger(event).info do
13
- payload = event.payload.dup
14
- # According to PR https://github.com/rocketjob/rails_semantic_logger/pull/37/files
15
- # payload[:params] is not always a Hash.
16
- payload[:params] = payload[:params].to_unsafe_h unless payload[:params].is_a?(Hash)
17
- payload[:params].except!(*INTERNAL_PARAMS)
18
- payload.delete(:params) if payload[:params].empty?
19
-
20
- format = payload[:format]
21
- payload[:format] = format.to_s.upcase if format.is_a?(Symbol)
22
-
23
- payload[:path] = extract_path(payload[:path]) if payload.has_key?(:path)
24
-
25
- exception = payload.delete(:exception)
26
- if payload[:status].nil? && exception.present?
27
- exception_class_name = exception.first
28
- payload[:status] = ActionDispatch::ExceptionWrapper.status_code_for_exception(exception_class_name)
29
- end
30
-
31
- # Rounds off the runtimes. For example, :view_runtime, :mongo_runtime, etc.
32
- payload.keys.each do |key|
33
- payload[key] = payload[key].to_f.round(2) if key.to_s.match(/(.*)_runtime/)
34
- end
35
-
36
- payload[:status_message] = Rack::Utils::HTTP_STATUS_CODES[payload[:status]] if payload[:status].present?
37
- # Causes excessive log output with Rails 5 RC1
38
- payload.delete(:headers)
39
-
40
- {
41
- message: "Completed ##{payload[:action]}",
42
- duration: event.duration,
43
- payload: payload
44
- }
45
- end
46
- end
47
-
48
- def halted_callback(event)
49
- controller_logger(event).info {"Filter chain halted as #{event.payload[:filter].inspect} rendered or redirected"}
50
- end
51
-
52
- def send_file(event)
53
- controller_logger(event).info('Sent file') {{path: event.payload[:path], duration: event.duration}}
54
- end
55
-
56
- def redirect_to(event)
57
- controller_logger(event).info('Redirected to') {{location: event.payload[:location]}}
58
- end
59
-
60
- def send_data(event)
61
- controller_logger(event).info('Sent data') {{file_name: event.payload[:filename], duration: event.duration}}
62
- end
63
-
64
- def unpermitted_parameters(event)
65
- controller_logger(event).debug do
66
- unpermitted_keys = event.payload[:keys]
67
- "Unpermitted parameter#{'s' if unpermitted_keys.size > 1}: #{unpermitted_keys.join(", ")}"
68
- end
69
- end
70
-
71
- %w(write_fragment read_fragment exist_fragment?
72
- expire_fragment expire_page write_page).each do |method|
73
- class_eval <<-METHOD, __FILE__, __LINE__ + 1
74
- def #{method}(event)
75
- # enable_fragment_cache_logging as of Rails 5
76
- return if ActionController::Base.respond_to?(:enable_fragment_cache_logging) && !ActionController::Base.enable_fragment_cache_logging
77
- controller_logger(event).info do
78
- key_or_path = event.payload[:key] || event.payload[:path]
79
- {message: "#{method.to_s.humanize} \#{key_or_path}", duration: event.duration}
80
- end
81
- end
82
- METHOD
83
- end
84
-
85
- private
86
-
87
- # Returns the logger for the supplied event.
88
- # Returns ActionController::Base.logger if no controller is present
89
- def controller_logger(event)
90
- if controller = event.payload[:controller]
91
- begin
92
- controller.constantize.logger
93
- rescue NameError
94
- ActionController::Base.logger
95
- end
96
- else
97
- ActionController::Base.logger
98
- end
99
- end
100
-
101
- def extract_path(path)
102
- index = path.index('?')
103
- index ? path[0, index] : path
104
- end
105
-
106
- end
107
- end
@@ -1,28 +0,0 @@
1
- require 'action_controller/log_subscriber'
2
- ActionController::LogSubscriber
3
-
4
- module ActionController
5
- class LogSubscriber
6
- # Log as info to show Processing messages in production
7
- def start_processing(event)
8
- controller_logger(event).info { "Processing ##{event.payload[:action]}" }
9
- end
10
-
11
- private
12
-
13
- # Returns the logger for the supplied event.
14
- # Returns ActionController::Base.logger if no controller is present
15
- def controller_logger(event)
16
- if controller = event.payload[:controller]
17
- begin
18
- controller.constantize.logger
19
- rescue NameError
20
- ActionController::Base.logger
21
- end
22
- else
23
- ActionController::Base.logger
24
- end
25
- end
26
-
27
- end
28
- end
@@ -1,12 +0,0 @@
1
- ActionView::LogSubscriber
2
- module ActionView
3
- class LogSubscriber
4
- def info(message = nil, &block)
5
- debug(message, &block)
6
- end
7
-
8
- def info?
9
- debug?
10
- end
11
- end
12
- end
@@ -1,44 +0,0 @@
1
- ActiveRecord::LogSubscriber
2
- module ActiveRecord
3
- class LogSubscriber
4
- def sql(event)
5
- self.class.runtime += event.duration
6
-
7
- return unless logger.debug?
8
-
9
- payload = event.payload
10
- name = payload[:name]
11
- return if IGNORE_PAYLOAD_NAMES.include?(name)
12
-
13
- log_payload = {
14
- sql: payload[:sql],
15
- }
16
- log = {
17
- message: name,
18
- payload: log_payload,
19
- duration: event.duration
20
- }
21
- unless (payload[:binds] || []).empty?
22
- log_payload[:binds] = binds = {}
23
- if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 0 && Rails::VERSION::TINY <= 2
24
- payload[:binds].each do |attr|
25
- attr_name, value = render_bind(attr)
26
- binds[attr_name] = value
27
- end
28
- elsif Rails::VERSION::MAJOR >= 5
29
- casted_params = type_casted_binds(payload[:binds], payload[:type_casted_binds])
30
- payload[:binds].zip(casted_params).map { |attr, value|
31
- render_bind(attr, value)
32
- }
33
- else
34
- payload[:binds].each do |col, v|
35
- attr_name, value = render_bind(col, v)
36
- binds[attr_name] = value
37
- end
38
- end
39
- end
40
- debug(log)
41
- end
42
-
43
- end
44
- end
@@ -1,63 +0,0 @@
1
- Rails::Rack::Logger
2
-
3
- # Replace rack started message with a semantic equivalent
4
- module Rails
5
- module Rack
6
- class Logger
7
- @logger = SemanticLogger['Rack']
8
-
9
- def self.logger
10
- @logger
11
- end
12
-
13
- def call(env)
14
- request = ActionDispatch::Request.new(env)
15
-
16
- # Check for named tags (Hash)
17
- if @taggers && !@taggers.empty?
18
- tags = @taggers.is_a?(Hash) ? compute_named_tags(request) : compute_tags(request)
19
- logger.tagged(tags) { call_app(request, env) }
20
- else
21
- call_app(request, env)
22
- end
23
- end
24
-
25
- def started_request_message(request)
26
- {
27
- message: 'Started',
28
- payload: {
29
- method: request.request_method,
30
- path: request.filtered_path,
31
- ip: request.ip
32
- }
33
- }
34
- end
35
-
36
- private
37
-
38
- def logger
39
- self.class.logger
40
- end
41
-
42
- # Leave out any named tags with a nil value
43
- def compute_named_tags(request) # :doc:
44
- tagged = {}
45
- @taggers.each_pair do |tag, value|
46
- resolved =
47
- case value
48
- when Proc
49
- value.call(request)
50
- when Symbol
51
- request.send(value)
52
- else
53
- value
54
- end
55
- tagged[tag] = resolved unless resolved.nil?
56
- end
57
- tagged
58
- end
59
-
60
- end
61
- end
62
- end
63
-
@@ -1,30 +0,0 @@
1
- Rails::Rack::Logger
2
-
3
- # Drop rack Started message to debug level message
4
- module Rails
5
- module Rack
6
- class Logger
7
- def self.logger
8
- @logger
9
- end
10
-
11
- private
12
-
13
- module LogInfoAsDebug
14
- def info(*args, &block)
15
- debug(*args, &block)
16
- end
17
- def info?
18
- debug?
19
- end
20
- end
21
-
22
- def logger
23
- self.class.logger
24
- end
25
-
26
- @logger = SemanticLogger['Rack']
27
- @logger.extend(LogInfoAsDebug)
28
- end
29
- end
30
- end