debug_logging 3.1.5 → 3.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -1
- data/lib/debug_logging.rb +148 -112
- data/lib/debug_logging/class_logger.rb +33 -25
- data/lib/debug_logging/class_notifier.rb +12 -4
- data/lib/debug_logging/configuration.rb +1 -27
- data/lib/debug_logging/constants.rb +33 -0
- data/lib/debug_logging/instance_logger_modulizer.rb +9 -1
- data/lib/debug_logging/instance_notifier_modulizer.rb +9 -1
- data/lib/debug_logging/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 434bf02e4e2e51b0ae6ffb99e4d5174d212a2337744e1fd7697d66d804ccc062
|
4
|
+
data.tar.gz: efb30cc90b8d325da9511f6899378b790916ad671af4b69df1b6171aa9cda80e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99ec10ad80d3caca7a1092365774530b017a15276515f06b610dfd39e0e3e7f9883f59489d53ac2162b36e6c39371eb115b588524c8c9ed2cd4355b30a61bd89
|
7
|
+
data.tar.gz: 9af78b97aed63a43e63c27e998d9c713ece75825bcc91b6be704cf757a289c43b96a106d5ef5bff2783828dfac3bd4d48ae110fcfd3841fb556c88cb64bb9108
|
data/README.md
CHANGED
@@ -42,6 +42,7 @@ Supports ActiveSupport::Notifications (thanks [@jgillson](https://github.com/jgi
|
|
42
42
|
* *ActiveRecord style callback-hooks (optional: `require 'debug_logging/hooks'` and `include DebugLogging::Hooks`), since v3.1.3*
|
43
43
|
* *All configuration is inheritable to, and overridable by, child classes, since v3.1.3*
|
44
44
|
* *[Class finalization hook](https://stackoverflow.com/a/34559282) (optional: `require 'debug_logging/finalize'` and `extend DebugLogging::Finalize`), since v3.1.3*
|
45
|
+
* *Error handling hooks you can use to log problems when they happen, since v3.1.7*
|
45
46
|
* **so many free ponies** 🎠🐴🎠🐴🎠🐴
|
46
47
|
|
47
48
|
## Next Level Magic
|
@@ -50,8 +51,10 @@ Herein you will find:
|
|
50
51
|
|
51
52
|
* Classes inheriting from Module
|
52
53
|
* Zero tolerance policy on monkey patching
|
54
|
+
* When the gem is loaded there are no monkey patches.
|
55
|
+
* Rather, your own classes/methods get "patched" and "hooked" as you configure them.
|
53
56
|
* 100% clean, 0% obtrusive
|
54
|
-
* 100% tested
|
57
|
+
* ~100% tested
|
55
58
|
* 100% Ruby 2.1+ compatible
|
56
59
|
- use version `gem "debug_logging", "~> 1.0"` for Ruby < 2.3
|
57
60
|
- use version `gem "debug_logging", "~> 2.0"` for Ruby 2.3
|
@@ -95,6 +98,7 @@ DebugLogging.configuration.log_level = :debug # at what level do the messages cr
|
|
95
98
|
DebugLogging.configuration.multiple_last_hashes = false # pass every hash argument to last_hash_to_s_proc?
|
96
99
|
DebugLogging.configuration.last_hash_to_s_proc = nil # e.g. ->(hash) { "keys: #{hash.keys}" }
|
97
100
|
DebugLogging.configuration.last_hash_max_length = 1_000
|
101
|
+
DebugLogging.configuration.args_to_s_proc = nil # e.g. ->(record) { "record id: #{record.id}" }
|
98
102
|
DebugLogging.configuration.args_max_length = 1_000
|
99
103
|
DebugLogging.configuration.instance_benchmarks = false
|
100
104
|
DebugLogging.configuration.class_benchmarks = false
|
@@ -104,6 +108,9 @@ DebugLogging.configuration.colorized_chain_for_class = false # e.g. ->(colorized
|
|
104
108
|
DebugLogging.configuration.add_invocation_id = true # identify a method call uniquely in a log, pass a proc for colorization, e.g. ->(colorized_string) { colorized_string.light_black }
|
105
109
|
DebugLogging.configuration.ellipsis = ' ✂️ …'.freeze
|
106
110
|
DebugLogging.configuration.mark_scope_exit = true # Only has an effect if benchmarking is off, since benchmarking always marks the scope exit
|
111
|
+
DebugLogging.configuration.add_payload = false # or a proc which will be called to print the payload
|
112
|
+
DebugLogging.configuration.payload_max_length = 1000
|
113
|
+
DebugLogging.configuration.error_handler_proc = nil # e.g. ->(error, config, obj) { config.log { "#{error.class}: #{error.message}\n#{obj.errors.inspect}" } }
|
107
114
|
```
|
108
115
|
|
109
116
|
If you prefer to use the block style:
|
@@ -115,6 +122,7 @@ DebugLogging.configure do |config|
|
|
115
122
|
config.multiple_last_hashes = false # pass every hash argument to last_hash_to_s_proc?
|
116
123
|
config.last_hash_to_s_proc = nil # e.g. ->(hash) { "keys: #{hash.keys}" }
|
117
124
|
config.last_hash_max_length = 1_000
|
125
|
+
config.args_to_s_proc = nil # e.g. ->(record) { "record id: #{record.id}" }
|
118
126
|
config.args_max_length = 1_000
|
119
127
|
config.instance_benchmarks = false
|
120
128
|
config.class_benchmarks = false
|
@@ -124,6 +132,9 @@ DebugLogging.configure do |config|
|
|
124
132
|
config.add_invocation_id = true # identify a method call uniquely in a log, pass a proc for colorization, e.g. ->(colorized_string) { colorized_string.light_black }
|
125
133
|
config.ellipsis = ' ✂️ …'.freeze
|
126
134
|
config.mark_scope_exit = true # Only has an effect if benchmarking is off, since benchmarking always marks the scope exit
|
135
|
+
config.add_payload = false # or a proc which will be called to print the payload
|
136
|
+
config.payload_max_length = 1000
|
137
|
+
config.error_handler_proc = nil # e.g. ->(error, config, obj) { config.log { "#{error.class}: #{error.message}\n#{obj.errors.inspect}" } }
|
127
138
|
end
|
128
139
|
```
|
129
140
|
|
data/lib/debug_logging.rb
CHANGED
@@ -4,6 +4,7 @@ require 'logger'
|
|
4
4
|
require 'colorized_string'
|
5
5
|
require 'digest'
|
6
6
|
|
7
|
+
require 'debug_logging/constants'
|
7
8
|
require 'debug_logging/version'
|
8
9
|
require 'debug_logging/errors'
|
9
10
|
require 'debug_logging/configuration'
|
@@ -64,6 +65,8 @@ require 'debug_logging/class_logger'
|
|
64
65
|
module DebugLogging
|
65
66
|
def self.extended(base)
|
66
67
|
base.send(:extend, ArgumentPrinter)
|
68
|
+
base.send(:extend, ApiClassMethods)
|
69
|
+
base.send(:extend, ConfigClassMethods)
|
67
70
|
base.debug_config_reset(Configuration.new(**debug_logging_configuration.to_hash))
|
68
71
|
base.class_eval do
|
69
72
|
def base.inherited(subclass)
|
@@ -73,22 +76,6 @@ module DebugLogging
|
|
73
76
|
end
|
74
77
|
|
75
78
|
#### API ####
|
76
|
-
# Not used by this gem internally, but provides an external interface for
|
77
|
-
# classes to also use this logging tool directly,
|
78
|
-
# with configured options like benchmarking, colors, or leg level.
|
79
|
-
def debug_log(message = nil, config_proxy = nil, &block)
|
80
|
-
# If a, instance-method-level, or class-method-level custom config is not
|
81
|
-
# passed in, then fall back to the class' default config, which is a
|
82
|
-
# potentially customized copy of the default config for the whole app.
|
83
|
-
config_proxy ||= debug_config
|
84
|
-
config_proxy.log(message, &block)
|
85
|
-
end
|
86
|
-
|
87
|
-
# There are times when the class will need access to the configuration object,
|
88
|
-
# such as to override it per instance method
|
89
|
-
def debug_config
|
90
|
-
@debug_logging_configuration
|
91
|
-
end
|
92
79
|
|
93
80
|
# For single statement global config in an initializer
|
94
81
|
# e.g. DebugLogging.configuration.ellipsis = "..."
|
@@ -101,138 +88,187 @@ module DebugLogging
|
|
101
88
|
yield(configuration)
|
102
89
|
end
|
103
90
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
91
|
+
module ApiClassMethods
|
92
|
+
# Not used by this gem internally, but provides an external interface for
|
93
|
+
# classes to also use this logging tool directly,
|
94
|
+
# with configured options like benchmarking, colors, or leg level.
|
95
|
+
def debug_log(message = nil, config_proxy = nil, &block)
|
96
|
+
# If a, instance-method-level, or class-method-level custom config is not
|
97
|
+
# passed in, then fall back to the class' default config, which is a
|
98
|
+
# potentially customized copy of the default config for the whole app.
|
99
|
+
config_proxy ||= debug_config
|
100
|
+
config_proxy.log(message, &block)
|
101
|
+
end
|
102
|
+
|
103
|
+
# There are times when the class will need access to the configuration object,
|
104
|
+
# such as to override it per instance method
|
105
|
+
def debug_config
|
106
|
+
@debug_logging_configuration
|
107
|
+
end
|
108
108
|
end
|
109
109
|
|
110
110
|
#### CONFIG ####
|
111
111
|
class << self
|
112
112
|
attr_accessor :debug_logging_configuration
|
113
113
|
end
|
114
|
-
def debug_config_reset(config = Configuration.new)
|
115
|
-
@debug_logging_configuration = config
|
116
|
-
end
|
117
114
|
|
118
|
-
|
119
|
-
|
120
|
-
end
|
115
|
+
module ConfigClassMethods
|
116
|
+
include Constants
|
121
117
|
|
122
|
-
|
123
|
-
|
124
|
-
|
118
|
+
# For per-class config with a block
|
119
|
+
def debug_logging_configure
|
120
|
+
@debug_logging_configuration ||= Configuration.new
|
121
|
+
yield(@debug_logging_configuration)
|
122
|
+
end
|
125
123
|
|
126
|
-
|
127
|
-
|
128
|
-
|
124
|
+
def debug_config_reset(config = Configuration.new)
|
125
|
+
@debug_logging_configuration = config
|
126
|
+
end
|
129
127
|
|
130
|
-
|
131
|
-
|
132
|
-
|
128
|
+
def debug_enabled
|
129
|
+
@debug_logging_configuration.enabled
|
130
|
+
end
|
133
131
|
|
134
|
-
|
135
|
-
|
136
|
-
|
132
|
+
def debug_enabled=(value)
|
133
|
+
@debug_logging_configuration.enabled = value
|
134
|
+
end
|
137
135
|
|
138
|
-
|
139
|
-
|
140
|
-
|
136
|
+
def debug_logger
|
137
|
+
@debug_logging_configuration.logger
|
138
|
+
end
|
141
139
|
|
142
|
-
|
143
|
-
|
144
|
-
|
140
|
+
def debug_logger=(logger)
|
141
|
+
@debug_logging_configuration.logger = logger
|
142
|
+
end
|
145
143
|
|
146
|
-
|
147
|
-
|
148
|
-
|
144
|
+
def debug_log_level
|
145
|
+
@debug_logging_configuration.log_level
|
146
|
+
end
|
149
147
|
|
150
|
-
|
151
|
-
|
152
|
-
|
148
|
+
def debug_log_level=(log_level)
|
149
|
+
@debug_logging_configuration.log_level = log_level
|
150
|
+
end
|
153
151
|
|
154
|
-
|
155
|
-
|
156
|
-
|
152
|
+
def debug_multiple_last_hashes
|
153
|
+
@debug_logging_configuration.multiple_last_hashes
|
154
|
+
end
|
157
155
|
|
158
|
-
|
159
|
-
|
160
|
-
|
156
|
+
def debug_multiple_last_hashes=(multiple_last_hashes)
|
157
|
+
@debug_logging_configuration.multiple_last_hashes = multiple_last_hashes
|
158
|
+
end
|
161
159
|
|
162
|
-
|
163
|
-
|
164
|
-
|
160
|
+
def debug_last_hash_to_s_proc
|
161
|
+
@debug_logging_configuration.last_hash_to_s_proc
|
162
|
+
end
|
165
163
|
|
166
|
-
|
167
|
-
|
168
|
-
|
164
|
+
def debug_last_hash_to_s_proc=(last_hash_to_s_proc)
|
165
|
+
@debug_logging_configuration.last_hash_to_s_proc = last_hash_to_s_proc
|
166
|
+
end
|
169
167
|
|
170
|
-
|
171
|
-
|
172
|
-
|
168
|
+
def debug_last_hash_max_length
|
169
|
+
@debug_logging_configuration.last_hash_max_length
|
170
|
+
end
|
173
171
|
|
174
|
-
|
175
|
-
|
176
|
-
|
172
|
+
def debug_last_hash_max_length=(last_hash_max_length)
|
173
|
+
@debug_logging_configuration.last_hash_max_length = last_hash_max_length
|
174
|
+
end
|
177
175
|
|
178
|
-
|
179
|
-
|
180
|
-
|
176
|
+
def debug_args_to_s_proc
|
177
|
+
@debug_logging_configuration.args_to_s_proc
|
178
|
+
end
|
181
179
|
|
182
|
-
|
183
|
-
|
184
|
-
|
180
|
+
def debug_args_to_s_proc=(args_to_s_proc)
|
181
|
+
@debug_logging_configuration.args_to_s_proc = args_to_s_proc
|
182
|
+
end
|
185
183
|
|
186
|
-
|
187
|
-
|
188
|
-
|
184
|
+
def debug_args_max_length
|
185
|
+
@debug_logging_configuration.args_max_length
|
186
|
+
end
|
189
187
|
|
190
|
-
|
191
|
-
|
192
|
-
|
188
|
+
def debug_args_max_length=(args_max_length)
|
189
|
+
@debug_logging_configuration.args_max_length = args_max_length
|
190
|
+
end
|
193
191
|
|
194
|
-
|
195
|
-
|
196
|
-
|
192
|
+
def debug_instance_benchmarks
|
193
|
+
@debug_logging_configuration.instance_benchmarks
|
194
|
+
end
|
197
195
|
|
198
|
-
|
199
|
-
|
200
|
-
|
196
|
+
def debug_instance_benchmarks=(instance_benchmarks)
|
197
|
+
@debug_logging_configuration.instance_benchmarks = instance_benchmarks
|
198
|
+
end
|
201
199
|
|
202
|
-
|
203
|
-
|
204
|
-
|
200
|
+
def debug_class_benchmarks
|
201
|
+
@debug_logging_configuration.class_benchmarks
|
202
|
+
end
|
205
203
|
|
206
|
-
|
207
|
-
|
208
|
-
|
204
|
+
def debug_class_benchmarks=(class_benchmarks)
|
205
|
+
@debug_logging_configuration.class_benchmarks = class_benchmarks
|
206
|
+
end
|
209
207
|
|
210
|
-
|
211
|
-
|
212
|
-
|
208
|
+
def debug_colorized_chain_for_method
|
209
|
+
@debug_logging_configuration.colorized_chain_for_method
|
210
|
+
end
|
213
211
|
|
214
|
-
|
215
|
-
|
216
|
-
|
212
|
+
def debug_colorized_chain_for_method=(colorized_chain_for_method)
|
213
|
+
@debug_logging_configuration.colorized_chain_for_method = colorized_chain_for_method
|
214
|
+
end
|
217
215
|
|
218
|
-
|
219
|
-
|
220
|
-
|
216
|
+
def debug_colorized_chain_for_class
|
217
|
+
@debug_logging_configuration.colorized_chain_for_class
|
218
|
+
end
|
221
219
|
|
222
|
-
|
223
|
-
|
224
|
-
|
220
|
+
def debug_colorized_chain_for_class=(colorized_chain_for_class)
|
221
|
+
@debug_logging_configuration.colorized_chain_for_class = colorized_chain_for_class
|
222
|
+
end
|
225
223
|
|
226
|
-
|
227
|
-
|
228
|
-
|
224
|
+
def debug_add_invocation_id
|
225
|
+
@debug_logging_configuration.add_invocation_id
|
226
|
+
end
|
229
227
|
|
230
|
-
|
231
|
-
|
232
|
-
|
228
|
+
def debug_add_invocation_id=(add_invocation_id)
|
229
|
+
@debug_logging_configuration.add_invocation_id = add_invocation_id
|
230
|
+
end
|
231
|
+
|
232
|
+
def debug_ellipsis
|
233
|
+
@debug_logging_configuration.ellipsis
|
234
|
+
end
|
235
|
+
|
236
|
+
def debug_ellipsis=(ellipsis)
|
237
|
+
@debug_logging_configuration.ellipsis = ellipsis
|
238
|
+
end
|
239
|
+
|
240
|
+
def debug_mark_scope_exit
|
241
|
+
@debug_logging_configuration.mark_scope_exit
|
242
|
+
end
|
243
|
+
|
244
|
+
def debug_mark_scope_exit=(mark_scope_exit)
|
245
|
+
@debug_logging_configuration.mark_scope_exit = mark_scope_exit
|
246
|
+
end
|
247
|
+
|
248
|
+
def debug_add_payload
|
249
|
+
@debug_logging_configuration.add_payload
|
250
|
+
end
|
233
251
|
|
234
|
-
|
235
|
-
|
252
|
+
def debug_add_payload=(add_payload)
|
253
|
+
@debug_logging_configuration.add_payload = add_payload
|
254
|
+
end
|
255
|
+
|
256
|
+
def debug_payload_max_length
|
257
|
+
@debug_logging_configuration.payload_max_length
|
258
|
+
end
|
259
|
+
|
260
|
+
def debug_payload_max_length=(payload_max_length)
|
261
|
+
@debug_logging_configuration.payload_max_length = payload_max_length
|
262
|
+
end
|
263
|
+
|
264
|
+
def debug_error_handler_proc
|
265
|
+
@debug_logging_configuration.error_handler_proc
|
266
|
+
end
|
267
|
+
|
268
|
+
def debug_error_handler_proc=(error_handler_proc)
|
269
|
+
@debug_logging_configuration.error_handler_proc = error_handler_proc
|
270
|
+
end
|
236
271
|
end
|
272
|
+
|
237
273
|
self.debug_logging_configuration = Configuration.new # setup defaults
|
238
274
|
end
|
@@ -26,39 +26,47 @@ module DebugLogging
|
|
26
26
|
method_return_value = nil
|
27
27
|
log_prefix = nil
|
28
28
|
invocation_id = nil
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
begin
|
30
|
+
config_proxy.log do
|
31
|
+
paydirt = DebugLogging::Util.payload_instance_vaiable_hydration(scope: self, payload: method_payload)
|
32
|
+
log_prefix = debug_invocation_to_s(klass: to_s, separator: '.', method_to_log: method_to_log,
|
33
|
+
config_proxy: config_proxy)
|
34
|
+
invocation_id = debug_invocation_id_to_s(args: args, config_proxy: config_proxy)
|
35
|
+
signature = debug_signature_to_s(args: args, config_proxy: config_proxy)
|
36
|
+
paymud = debug_payload_to_s(payload: paydirt, config_proxy: config_proxy)
|
37
|
+
"#{log_prefix}#{signature}#{invocation_id} debug: #{paymud}"
|
38
|
+
end
|
39
|
+
if config_proxy.benchmarkable_for?(:debug_class_benchmarks)
|
40
|
+
tms = Benchmark.measure do
|
41
|
+
method_return_value = if args.size == 1 && (harsh = args[0]) && harsh.is_a?(Hash)
|
42
|
+
original_method.call(**harsh, &block)
|
43
|
+
else
|
44
|
+
original_method.call(*args, &block)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
config_proxy.log do
|
48
|
+
"#{log_prefix} #{debug_benchmark_to_s(tms: tms)}#{invocation_id}"
|
49
|
+
end
|
50
|
+
else
|
40
51
|
method_return_value = if args.size == 1 && (harsh = args[0]) && harsh.is_a?(Hash)
|
41
52
|
original_method.call(**harsh, &block)
|
42
53
|
else
|
43
54
|
original_method.call(*args, &block)
|
44
55
|
end
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
else
|
50
|
-
method_return_value = if args.size == 1 && (harsh = args[0]) && harsh.is_a?(Hash)
|
51
|
-
original_method.call(**harsh, &block)
|
52
|
-
else
|
53
|
-
original_method.call(*args, &block)
|
54
|
-
end
|
55
|
-
if config_proxy.exit_scope_markable? && invocation_id && !invocation_id.empty?
|
56
|
-
config_proxy.log do
|
57
|
-
"#{log_prefix} completed#{invocation_id}"
|
56
|
+
if config_proxy.exit_scope_markable? && invocation_id && !invocation_id.empty?
|
57
|
+
config_proxy.log do
|
58
|
+
"#{log_prefix} completed#{invocation_id}"
|
59
|
+
end
|
58
60
|
end
|
59
61
|
end
|
62
|
+
method_return_value
|
63
|
+
rescue => error
|
64
|
+
if config_proxy.error_handler_proc
|
65
|
+
config_proxy.error_handler_proc.call(config_proxy, error, self)
|
66
|
+
else
|
67
|
+
raise error
|
68
|
+
end
|
60
69
|
end
|
61
|
-
method_return_value
|
62
70
|
end
|
63
71
|
end
|
64
72
|
end
|
@@ -40,10 +40,18 @@ module DebugLogging
|
|
40
40
|
**paydirt
|
41
41
|
}
|
42
42
|
) do
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
begin
|
44
|
+
if args.size == 1 && (harsh = args[0]) && harsh.is_a?(Hash)
|
45
|
+
original_method.call(**harsh, &block)
|
46
|
+
else
|
47
|
+
original_method.call(*args, &block)
|
48
|
+
end
|
49
|
+
rescue => error
|
50
|
+
if config_proxy.error_handler_proc
|
51
|
+
config_proxy.error_handler_proc.call(config_proxy, error, self)
|
52
|
+
else
|
53
|
+
raise error
|
54
|
+
end
|
47
55
|
end
|
48
56
|
end
|
49
57
|
end
|
@@ -2,33 +2,7 @@
|
|
2
2
|
|
3
3
|
module DebugLogging
|
4
4
|
class Configuration
|
5
|
-
|
6
|
-
CONFIG_ATTRS_DEFAULTS = {
|
7
|
-
enabled: true,
|
8
|
-
logger: Logger.new($stdout),
|
9
|
-
log_level: :debug,
|
10
|
-
multiple_last_hashes: false,
|
11
|
-
last_hash_to_s_proc: nil,
|
12
|
-
last_hash_max_length: 1_000,
|
13
|
-
args_to_s_proc: nil,
|
14
|
-
args_max_length: 1_000,
|
15
|
-
colorized_chain_for_method: false,
|
16
|
-
colorized_chain_for_class: false,
|
17
|
-
add_invocation_id: true,
|
18
|
-
ellipsis: DEFAULT_ELLIPSIS,
|
19
|
-
mark_scope_exit: false,
|
20
|
-
add_payload: true, # Can also be a proc returning a string, which will be called when printing the payload
|
21
|
-
payload_max_length: 1_000
|
22
|
-
}.freeze
|
23
|
-
CONFIG_ATTRS = CONFIG_ATTRS_DEFAULTS.keys
|
24
|
-
CONFIG_READERS_DEFAULTS = {
|
25
|
-
instance_benchmarks: false,
|
26
|
-
class_benchmarks: false,
|
27
|
-
active_support_notifications: false
|
28
|
-
}.freeze
|
29
|
-
CONFIG_READERS = CONFIG_READERS_DEFAULTS.keys
|
30
|
-
CONFIG_KEYS = CONFIG_ATTRS + CONFIG_READERS
|
31
|
-
|
5
|
+
include Constants
|
32
6
|
# For reference, log levels as integers mapped to symbols:
|
33
7
|
# LEVELS = { 0 => :debug, 1 => :info, 2 => :warn, 3 => :error, 4 => :fatal, 5 => :unknown }
|
34
8
|
attr_accessor(*CONFIG_ATTRS)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DebugLogging
|
4
|
+
module Constants
|
5
|
+
DEFAULT_ELLIPSIS = ' ✂️ …'
|
6
|
+
CONFIG_ATTRS_DEFAULTS = {
|
7
|
+
enabled: true,
|
8
|
+
logger: Logger.new($stdout),
|
9
|
+
log_level: :debug,
|
10
|
+
multiple_last_hashes: false,
|
11
|
+
last_hash_to_s_proc: nil,
|
12
|
+
last_hash_max_length: 1_000,
|
13
|
+
args_to_s_proc: nil,
|
14
|
+
args_max_length: 1_000,
|
15
|
+
colorized_chain_for_method: false,
|
16
|
+
colorized_chain_for_class: false,
|
17
|
+
add_invocation_id: true,
|
18
|
+
ellipsis: DEFAULT_ELLIPSIS,
|
19
|
+
mark_scope_exit: false,
|
20
|
+
add_payload: true, # Can also be a proc returning a string, which will be called when printing the payload
|
21
|
+
payload_max_length: 1_000,
|
22
|
+
error_handler_proc: nil
|
23
|
+
}.freeze
|
24
|
+
CONFIG_ATTRS = CONFIG_ATTRS_DEFAULTS.keys
|
25
|
+
CONFIG_READERS_DEFAULTS = {
|
26
|
+
instance_benchmarks: false,
|
27
|
+
class_benchmarks: false,
|
28
|
+
active_support_notifications: false
|
29
|
+
}.freeze
|
30
|
+
CONFIG_READERS = CONFIG_READERS_DEFAULTS.keys
|
31
|
+
CONFIG_KEYS = CONFIG_ATTRS + CONFIG_READERS
|
32
|
+
end
|
33
|
+
end
|
@@ -40,7 +40,15 @@ module DebugLogging
|
|
40
40
|
"#{log_prefix} #{self.class.debug_benchmark_to_s(tms: tms)}#{invocation_id}"
|
41
41
|
end
|
42
42
|
else
|
43
|
-
|
43
|
+
begin
|
44
|
+
method_return_value = super(*args, &block)
|
45
|
+
rescue => error
|
46
|
+
if config_proxy.error_handler_proc
|
47
|
+
config_proxy.error_handler_proc.call(config_proxy, error, self)
|
48
|
+
else
|
49
|
+
raise error
|
50
|
+
end
|
51
|
+
end
|
44
52
|
if config_proxy.exit_scope_markable? && invocation_id && !invocation_id.empty?
|
45
53
|
config_proxy.log do
|
46
54
|
"#{log_prefix} completed#{invocation_id}"
|
@@ -37,7 +37,15 @@ module DebugLogging
|
|
37
37
|
config_proxy: config_proxy,
|
38
38
|
**paydirt
|
39
39
|
) do
|
40
|
-
|
40
|
+
begin
|
41
|
+
super(*args, &block)
|
42
|
+
rescue => error
|
43
|
+
if config_proxy.error_handler_proc
|
44
|
+
config_proxy.error_handler_proc.call(config_proxy, error, self)
|
45
|
+
else
|
46
|
+
raise error
|
47
|
+
end
|
48
|
+
end
|
41
49
|
end
|
42
50
|
end
|
43
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: debug_logging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Boling
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-12-
|
12
|
+
date: 2020-12-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colorize
|
@@ -227,6 +227,7 @@ files:
|
|
227
227
|
- lib/debug_logging/class_logger.rb
|
228
228
|
- lib/debug_logging/class_notifier.rb
|
229
229
|
- lib/debug_logging/configuration.rb
|
230
|
+
- lib/debug_logging/constants.rb
|
230
231
|
- lib/debug_logging/errors.rb
|
231
232
|
- lib/debug_logging/finalize.rb
|
232
233
|
- lib/debug_logging/hooks.rb
|