rails_semantic_logger 4.1.3 → 4.12.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/README.md +17 -10
- data/Rakefile +9 -9
- data/lib/rails_semantic_logger/action_controller/log_subscriber.rb +125 -0
- data/lib/rails_semantic_logger/action_mailer/log_subscriber.rb +135 -0
- data/lib/rails_semantic_logger/action_view/log_subscriber.rb +111 -0
- data/lib/rails_semantic_logger/active_job/log_subscriber.rb +126 -0
- data/lib/rails_semantic_logger/active_record/log_subscriber.rb +218 -0
- data/lib/rails_semantic_logger/delayed_job/plugin.rb +11 -0
- data/lib/rails_semantic_logger/engine.rb +189 -194
- data/lib/rails_semantic_logger/extensions/action_cable/tagged_logger_proxy.rb +1 -1
- data/lib/rails_semantic_logger/extensions/action_controller/live.rb +8 -4
- data/lib/rails_semantic_logger/extensions/action_dispatch/debug_exceptions.rb +11 -7
- data/lib/rails_semantic_logger/extensions/action_view/streaming_template_renderer.rb +10 -6
- data/lib/rails_semantic_logger/extensions/active_job/logging.rb +10 -6
- data/lib/rails_semantic_logger/extensions/active_model_serializers/logging.rb +12 -9
- data/lib/rails_semantic_logger/extensions/active_support/logger.rb +24 -0
- data/lib/rails_semantic_logger/extensions/active_support/tagged_logging.rb +8 -0
- data/lib/rails_semantic_logger/extensions/mongoid/config.rb +11 -0
- data/lib/rails_semantic_logger/extensions/rack/server.rb +12 -0
- data/lib/rails_semantic_logger/extensions/rails/server.rb +9 -5
- data/lib/rails_semantic_logger/options.rb +122 -0
- data/lib/rails_semantic_logger/rack/logger.rb +100 -0
- data/lib/rails_semantic_logger/version.rb +2 -2
- data/lib/rails_semantic_logger.rb +58 -3
- metadata +46 -24
- data/lib/rails_semantic_logger/extensions/action_controller/log_subscriber.rb +0 -107
- data/lib/rails_semantic_logger/extensions/action_controller/log_subscriber_processing.rb +0 -28
- data/lib/rails_semantic_logger/extensions/action_view/log_subscriber.rb +0 -12
- data/lib/rails_semantic_logger/extensions/active_record/log_subscriber.rb +0 -44
- data/lib/rails_semantic_logger/extensions/rails/rack/logger.rb +0 -63
- 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,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
|