debug_logging 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80eec636fd64a69b41aaf67704b79c784bc5ffa989e181c51106bc908bc645c8
4
- data.tar.gz: 8feca3ec5aadd298bc0da9f75631834f4a16bd73aa9d39572c8caf72ec2834b4
3
+ metadata.gz: ca22c0dbc789a56d7f02d3ef685d92fb0423592bde3fccaa733afcd577c88a78
4
+ data.tar.gz: 279bdd5ecde603ff0be14ec128bea893a05a53d0d4c0f42fbdb6663964fff178
5
5
  SHA512:
6
- metadata.gz: bd13ad1dca5706140626730a48dc4e9133efc5e3db3d55f64b4c79f3a0bb21765d82a237c2a021d93ec2b4d0632d4a0a4bc5a3c28ef2bad088de9de37d6fdc3e
7
- data.tar.gz: 9be10f369557ed872853e387870528c0a64df4981c854b3df6b27d22f0d24eac741d51e69beec9c6e6cfd2398748838d47ac5955df951d906d77378f60d4331a
6
+ metadata.gz: 352720fb350ee3c404f64b631c6f27f178ca8bb07b66e779cb26a66077708df9e716f7b0ef49e80035f44a45bc8081e436f420a14ac07f17d44a6b7e67ba46d1
7
+ data.tar.gz: 5effc5e2ef194e6e90c9c57f3378523a6fda0d5ab2b4d5fd7c4161bc542385b9796cfef56f015a756a75ead1969bb83f94c81d3dc4ba54607b7d9e2adab4c46f
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -11,7 +11,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
  ### Fixed
12
12
  ### Removed
13
13
 
14
- ## [4.0.0] - unreleased
14
+ ## [4.0.1] ([tag][4.0.1t]) - 2024-03-01
15
+ ### Added
16
+ - Support for all Numeric types to be used as monotonic timestamps for ActiveSupport::Notifications
17
+ - `time_formatter_proc` - used to format timestamp added to beginning of log lines
18
+ - `add_timestamp` - Add timestamp to front of each log line
19
+ ### Changed
20
+ - `DebugLogging::ArgumentPrinter.debug_time_to_s` => `DebugLogging::ArgumentPrinter.debug_event_time_to_s`
21
+ ### Fixed
22
+ ### Removed
23
+
24
+ ## [4.0.0] ([tag][4.0.0t]) - 2024-02-28
15
25
  ### Added
16
26
  - Class method DSL:
17
27
  - `logged`
@@ -30,57 +40,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
30
40
  - Support for `include DebugLogging::InstanceLogger.new(...)`
31
41
  - Support for `include DebugLogging::InstanceNotifier.new(...)`
32
42
 
33
- ## [3.1.9] - 2023-10-31
43
+ ## [3.1.9] ([tag][3.1.9t]) - 2023-10-31
34
44
  ### Fixed
35
45
  - Maximum Ruby version is 2.7. Versions 3.x are not compatible with Ruby >= 3
36
46
 
37
- ## [3.1.8] - 2020-12-19
47
+ ## [3.1.8] ([tag][3.1.8t]) - 2020-12-19
38
48
 
39
- ## [3.1.7] - 2020-12-19
49
+ ## [3.1.7] ([tag][3.1.7t]) - 2020-12-19
40
50
 
41
- ## [3.1.6] - tagged, but unreleased
51
+ ## [3.1.6] ([tag][3.1.6t]) - tagged, but unreleased
42
52
 
43
- ## [3.1.5] - 2020-12-18
53
+ ## [3.1.5] ([tag][3.1.5t]) - 2020-12-18
44
54
 
45
- ## [3.1.4] - 2020-12-18
55
+ ## [3.1.4] ([tag][3.1.4t]) - 2020-12-18
46
56
 
47
- ## [3.1.3] - 2020-12-18
57
+ ## [3.1.3] ([tag][3.1.3t]) - 2020-12-18
48
58
 
49
- ## [3.1.2] - 2020-12-10
59
+ ## [3.1.2] ([tag][3.1.2t]) - 2020-12-10
50
60
 
51
- ## [3.1.1] - 2020-12-09
61
+ ## [3.1.1] ([tag][3.1.1t]) - 2020-12-09
52
62
 
53
- ## [3.1.0] - 2020-10-24
63
+ ## [3.1.0] ([tag][3.1.0t]) - 2020-10-24
54
64
 
55
- ## [3.0.0] - 2020-10-07
65
+ ## [3.0.0] ([tag][3.0.0t]) - 2020-10-07
56
66
 
57
- ## [2.0.0] - 2020-10-06
67
+ ## [2.0.0] ([tag][2.0.0t]) - 2020-10-06
58
68
 
59
- ## [1.0.17] - 2018-09-10
69
+ ## [1.0.17] ([tag][1.0.17t]) - 2018-09-10
60
70
 
61
- ## [1.0.16] - 2018-01-16
71
+ ## [1.0.16] ([tag][1.0.16t]) - 2018-01-16
62
72
 
63
- ## [1.0.15] - 2017-10-17
73
+ ## [1.0.15] ([tag][1.0.15t]) - 2017-10-17
64
74
 
65
- ## [1.0.14] - 2017-10-09
75
+ ## [1.0.14] ([tag][1.0.14t]) - 2017-10-09
66
76
 
67
- ## [1.0.13] - 2017-10-08
77
+ ## [1.0.13] ([tag][1.0.13t]) - 2017-10-08
68
78
 
69
- ## [1.0.12] - 2017-10-08
79
+ ## [1.0.12] ([tag][1.0.12t]) - 2017-10-08
70
80
 
71
- ## [1.0.11] - 2017-10-06
81
+ ## [1.0.11] ([tag][1.0.11t]) - 2017-10-06
72
82
 
73
- ## [1.0.10] - 2017-09-26
83
+ ## [1.0.10] ([tag][1.0.10t]) - 2017-09-26
74
84
 
75
- ## [1.0.9] - 2017-09-06
85
+ ## [1.0.9] ([tag][1.0.9t]) - 2017-09-06
76
86
 
77
- ## [1.0.8] - 2017-09-06
87
+ ## [1.0.8] ([tag][1.0.8t]) - 2017-09-06
78
88
 
79
- ## [1.0.7] - 2017-09-06
89
+ ## [1.0.7] ([tag][1.0.7t]) - 2017-09-06
80
90
 
81
- ## [1.0.6] - 2017-09-05
91
+ ## [1.0.6] ([tag][1.0.6t]) - 2017-09-05
82
92
 
83
- ## [1.0.5] ([tag][1.0.1t]) - 2017-03-31
93
+ ## [1.0.5] ([tag][1.0.5t]) - 2017-03-31
84
94
 
85
95
  ## [1.0.4] ([tag][1.0.4t]) - 2017-03-31
86
96
 
@@ -95,7 +105,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
95
105
  ## [0.1.0] ([tag][0.1.0t]) - 2017-03-25
96
106
  - Initial release
97
107
 
98
- [Unreleased]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v3.1.9...HEAD
108
+ [Unreleased]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v4.0.1...HEAD
109
+ [4.0.1t]: https://gitlab.com/pboling/debug_logging/-/tags/v4.0.1
110
+ [4.0.1]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v4.0.0...v4.0.1
111
+ [4.0.0t]: https://gitlab.com/pboling/debug_logging/-/tags/v4.0.0
112
+ [4.0.0]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v3.1.9...v4.0.0
99
113
  [3.1.9t]: https://gitlab.com/pboling/debug_logging/-/tags/v3.1.9
100
114
  [3.1.9]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v3.1.8...v3.1.9
101
115
  [3.1.8t]: https://gitlab.com/pboling/debug_logging/-/tags/v3.1.8
data/README.md CHANGED
@@ -148,7 +148,7 @@ Recommend creating `config/initializers/debug_logging.rb`, or adding to `config/
148
148
  ```ruby
149
149
  # Showing the defaults
150
150
  DebugLogging.configuration.logger = Logger.new($stdout) # you probably want to override to be the Rails.logger, and if so you can't set it in the initializer, as it needs to be set after Rails.logger is set.
151
- DebugLogging.configuration.log_level = :debug # at what level do the messages created by this gem sent at?
151
+ DebugLogging.configuration.log_level = :debug # at what level are the messages created by this gem sent at?
152
152
  DebugLogging.configuration.multiple_last_hashes = false # pass every hash argument to last_hash_to_s_proc?
153
153
  DebugLogging.configuration.last_hash_to_s_proc = nil # e.g. ->(hash) { "keys: #{hash.keys}" }
154
154
  DebugLogging.configuration.last_hash_max_length = 1_000
@@ -160,6 +160,8 @@ DebugLogging.configuration.active_support_notifications = false
160
160
  DebugLogging.configuration.colorized_chain_for_method = false # e.g. ->(colorized_string) { colorized_string.red.on_blue.underline }
161
161
  DebugLogging.configuration.colorized_chain_for_class = false # e.g. ->(colorized_string) { colorized_string.colorize(:light_blue ).colorize( :background => :red) }
162
162
  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 }
163
+ DebugLogging.configuration.time_formatter_proc = DebugLogging::Constants::DEFAULT_TIME_FORMATTER
164
+ DebugLogging.configuration.add_timestamp = false
163
165
  DebugLogging.configuration.ellipsis = " ✂️ …".freeze
164
166
  DebugLogging.configuration.mark_scope_exit = true # Only has an effect if benchmarking is off, since benchmarking always marks the scope exit
165
167
  DebugLogging.configuration.add_payload = false # or a proc which will be called to print the payload
@@ -183,6 +185,8 @@ DebugLogging.configure do |config|
183
185
  config.active_support_notifications = false
184
186
  config.colorized_chain_for_method = false # e.g. ->(colorized_string) { colorized_string.red.on_blue.underline }
185
187
  config.colorized_chain_for_class = false # e.g. ->(colorized_string) { colorized_string.colorize(:light_blue ).colorize( :background => :red) }
188
+ config.time_formatter_proc = DebugLogging::Constants::DEFAULT_TIME_FORMATTER
189
+ config.add_timestamp = false
186
190
  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 }
187
191
  config.ellipsis = " ✂️ …".freeze
188
192
  config.mark_scope_exit = true # Only has an effect if benchmarking is off, since benchmarking always marks the scope exit
@@ -208,7 +212,7 @@ Just send along a hash of the config options, similar to the following:
208
212
 
209
213
  See the example class below, and the specs.
210
214
 
211
- **NOTE ON** `Rails.logger` - It will probably be nil in your initializer, so setting the `config.logger` to `Rails.logger` there will result in setting it to `nil`, which means the default will end up being used: `Logger.new(STDOUT)`. Instead just config the logger in your application.rb, or anytime later, but *before your classes get loaded* and start inheriting the config:
215
+ **NOTE ON** `Rails.logger` - It will probably be nil in your initializer, so setting the `config.logger` to `Rails.logger` there will result in setting it to `nil`, which means the default will end up being used: `Logger.new($stdout)`. Instead just config the logger in your application.rb, or anytime later, but *before your classes get loaded* and start inheriting the config:
212
216
 
213
217
  ```ruby
214
218
  DebugLogging.configuration.logger = Rails.logger
@@ -294,7 +298,28 @@ class Car
294
298
  # Override configuration options for any instance method(s), by passing a hash as the last argument
295
299
  # In the last hash any non-Configuration keys will be data that gets logged,
296
300
  # and also made available to last_hash_to_s_proc
297
- i_logged [:faster], {add_invocation_id: false}
301
+ # Here's an example that sets every possible option, while also showing what the default values are!
302
+ i_logged [:faster], {
303
+ logger: Logger.new($stdout), # probably want to override to be the Rails.logger
304
+ log_level: :debug, # at what level do the messages created by this gem sent at?
305
+ multiple_last_hashes: false,
306
+ last_hash_to_s_proc: nil, # e.g. ->(hash) { "keys: #{hash.keys}" }
307
+ last_hash_max_length: 1_000,
308
+ args_to_s_proc: nil, # e.g. ->(*record) { "record id: #{record.first.id}" }
309
+ args_max_length: 1_000,
310
+ colorized_chain_for_method: false, # e.g. ->(colorized_string) { colorized_string.red.on_blue.underline }
311
+ colorized_chain_for_class: false, # e.g. ->(colorized_string) { colorized_string.colorize(:light_blue ).colorize( :background => :red) }
312
+ add_invocation_id: true, # allows unique identification of method call; association of entry and exit log lines
313
+ ellipsis: " ✂️ …".freeze,
314
+ mark_scope_exit: false,
315
+ add_payload: true, # Can also be a proc returning a string, which will be called when printing the payload
316
+ payload_max_length: 1_000,
317
+ error_handler_proc: nil,
318
+ time_formatter_proc: DebugLogging::Constants::DEFAULT_TIME_FORMATTER,
319
+ add_timestamp: false,
320
+ instance_benchmarks: false,
321
+ class_benchmarks: false,
322
+ }
298
323
 
299
324
  # You can also use `i_logged` as a true method decorator:
300
325
  i_logged def slower
data/SECURITY.md CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  | Version | Supported |
6
6
  |---------|-----------|
7
- | 3.1.x | ✅ |
8
- | 3.0.x | ❌ |
7
+ | 4.x | ✅ |
8
+ | 3.x | ❌ |
9
9
  | 2.x | ❌ |
10
10
  | 1.x | ❌ |
11
11
 
@@ -7,11 +7,13 @@ module DebugLogging
7
7
  "completed in #{format("%f", tms.real)}s (#{format("%f", tms.total)}s CPU)"
8
8
  end
9
9
 
10
- def debug_invocation_id_to_s(args: nil, kwargs: nil, config_proxy: nil)
10
+ def debug_invocation_id_to_s(args: nil, kwargs: nil, start_at: nil, config_proxy: nil)
11
11
  return "" unless (args || kwargs) && config_proxy
12
12
 
13
13
  if config_proxy.debug_add_invocation_id
14
- invocation = " ~#{args.object_id}|#{kwargs.object_id}@#{(Time.now.to_f.to_s % "%#-21a")[4..-4]}~"
14
+ time = start_at ? Util.debug_time(start_at) : Time.now
15
+ unique_id = (time.to_f.to_s % "%#-21a")[4..-4]
16
+ invocation = " ~#{args.object_id}|#{kwargs.object_id}@#{unique_id}~"
15
17
  case config_proxy.debug_add_invocation_id
16
18
  when true
17
19
  invocation
@@ -23,21 +25,25 @@ module DebugLogging
23
25
  end
24
26
  end
25
27
 
26
- def debug_time_to_s(time_or_monotonic)
28
+ # @return [String]
29
+ def debug_time_to_s(time_or_monotonic, config_proxy: nil)
30
+ return "" unless config_proxy&.debug_add_timestamp
31
+ return config_proxy.debug_time_formatter_proc.call(Time.now) unless time_or_monotonic
32
+
33
+ time = Util.debug_time(time_or_monotonic)
34
+
35
+ config_proxy.debug_time_formatter_proc.call(time)
36
+ end
37
+
38
+ # A custom time format will never apply here, because ActiveSupport::Notifications have a required time format
39
+ def debug_event_time_to_s(time_or_monotonic)
27
40
  # Time format must match:
28
41
  # \d{4,}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-+]\d{4}
29
42
  # YYYY-MM-DD HH:mm:ss +00:00
30
43
  # strftime("%F %T %z")
31
- case time_or_monotonic
32
- when Float
33
- Time.at(time_or_monotonic).strftime("%F %T %z")
34
- when Time, DateTime
35
- time_or_monotonic.strftime("%F %T %z")
36
- when String
37
- Time.parse(time_or_monotonic).strftime("%F %T %z")
38
- else
39
- time_or_monotonic
40
- end
44
+ time_or_monotonic = Time.now if time_or_monotonic.nil? || (time_or_monotonic.respond_to?(:empty?) && time_or_monotonic.empty?)
45
+ time = Util.debug_time(time_or_monotonic)
46
+ DebugLogging::Constants::EVENT_TIME_FORMATTER.call(time)
41
47
  end
42
48
 
43
49
  def debug_invocation_to_s(klass: nil, separator: nil, method_to_log: nil, config_proxy: nil)
@@ -188,7 +194,7 @@ module DebugLogging
188
194
  proc_name: "add_payload",
189
195
  proc: config_proxy.debug_add_payload,
190
196
  args: payload,
191
- max_length: config_proxy.payload_max_length,
197
+ max_length: config_proxy.debug_payload_max_length,
192
198
  )
193
199
  printed_payload += printed
194
200
  printed_payload += config_proxy.debug_ellipsis if add_payload_ellipsis
@@ -12,16 +12,25 @@ module DebugLogging
12
12
  # extend DebugLogging::InstanceLogger
13
13
  # i_logged [:drive, :stop],
14
14
  # {
15
- # logger: Logger.new(STDOUT) # probably want to override to be the Rails.logger
16
- # log_level: :debug # at what level do the messages created by this gem sent at?
17
- # last_hash_to_s_proc: nil # e.g. ->(hash) { "keys: #{hash.keys}" }
18
- # last_hash_max_length: 1_000
19
- # args_to_s_proc: nil # e.g. ->(*record) { "record id: #{record.first.id}" }
20
- # args_max_length: 1_000
21
- # instance_benchmarks: false
22
- # class_benchmarks: false
23
- # add_invocation_id: true # invocation id allows you to identify a method call uniquely in a log
24
- # ellipsis: " ✂️ …".freeze
15
+ # logger: Logger.new($stdout), # probably want to override to be the Rails.logger
16
+ # log_level: :debug, # at what level do the messages created by this gem sent at?
17
+ # multiple_last_hashes: false,
18
+ # last_hash_to_s_proc: nil, # e.g. ->(hash) { "keys: #{hash.keys}" }
19
+ # last_hash_max_length: 1_000,
20
+ # args_to_s_proc: nil, # e.g. ->(*record) { "record id: #{record.first.id}" }
21
+ # args_max_length: 1_000,
22
+ # colorized_chain_for_method: false, # e.g. ->(colorized_string) { colorized_string.red.on_blue.underline }
23
+ # colorized_chain_for_class: false, # e.g. ->(colorized_string) { colorized_string.colorize(:light_blue ).colorize( :background => :red) }
24
+ # add_invocation_id: true, # allows unique identification of method call; association of entry and exit log lines
25
+ # ellipsis: " ✂️ …".freeze,
26
+ # mark_scope_exit: false,
27
+ # add_payload: true, # Can also be a proc returning a string, which will be called when printing the payload
28
+ # payload_max_length: 1_000,
29
+ # error_handler_proc: nil,
30
+ # time_formatter_proc: DebugLogging::Constants::DEFAULT_TIME_FORMATTER,
31
+ # add_timestamp: false,
32
+ # instance_benchmarks: false,
33
+ # class_benchmarks: false,
25
34
  # }
26
35
  #
27
36
  CONFIG_KEYS.each do |key|
@@ -1,23 +1,27 @@
1
1
  module DebugLogging
2
2
  module Constants
3
3
  DEFAULT_ELLIPSIS = " ✂️ …"
4
+ DEFAULT_TIME_FORMATTER = ->(time) { "[#{time.strftime("%Y%m%d %H:%M:%S")}] " }
5
+ EVENT_TIME_FORMATTER = ->(time) { time.strftime("%F %T %z") }
4
6
  CONFIG_ATTRS_DEFAULTS = {
5
7
  enabled: true,
6
- logger: Logger.new($stdout),
7
- log_level: :debug,
8
+ logger: Logger.new($stdout), # probably want to override to be the Rails.logger
9
+ log_level: :debug, # at what level do the messages created by this gem sent at?
8
10
  multiple_last_hashes: false,
9
- last_hash_to_s_proc: nil,
11
+ last_hash_to_s_proc: nil, # e.g. ->(hash) { "keys: #{hash.keys}" }
10
12
  last_hash_max_length: 1_000,
11
- args_to_s_proc: nil,
13
+ args_to_s_proc: nil, # e.g. ->(*record) { "record id: #{record.first.id}" }
12
14
  args_max_length: 1_000,
13
- colorized_chain_for_method: false,
14
- colorized_chain_for_class: false,
15
- add_invocation_id: true,
15
+ colorized_chain_for_method: false, # e.g. ->(colorized_string) { colorized_string.red.on_blue.underline }
16
+ colorized_chain_for_class: false, # e.g. ->(colorized_string) { colorized_string.colorize(:light_blue ).colorize( :background => :red) }
17
+ add_invocation_id: true, # allows unique identification of method call; association of entry and exit log lines
16
18
  ellipsis: DEFAULT_ELLIPSIS,
17
19
  mark_scope_exit: false,
18
20
  add_payload: true, # Can also be a proc returning a string, which will be called when printing the payload
19
21
  payload_max_length: 1_000,
20
22
  error_handler_proc: nil,
23
+ time_formatter_proc: DEFAULT_TIME_FORMATTER,
24
+ add_timestamp: false,
21
25
  }.freeze
22
26
  CONFIG_ATTRS = CONFIG_ATTRS_DEFAULTS.keys
23
27
  CONFIG_READERS_DEFAULTS = {
@@ -1,5 +1,27 @@
1
1
  module DebugLogging
2
2
  module InstanceLogger
3
+ # NOTE: These params can be passed in / hidden in a last hash of *args
4
+ # NOTE: They can also be passed in discretely for each method, by passing *args as an array of arrays
5
+ # TODO: Refactor to use modern Ruby 3 *args, **kwargs instead
6
+ # @param logger [Logger] Logger.new($stdout), # probably want to override to be the Rails.logger
7
+ # @param log_level [Symbol] default: :debug, at what level do the messages created by this gem sent at?
8
+ # @param multiple_last_hashes [true, false] default: false,
9
+ # @param last_hash_to_s_proc [nil, Proc] default: nil, e.g. ->(hash) { "keys: #{hash.keys}" }
10
+ # @param last_hash_max_length [Integer] default: 1_000,
11
+ # @param args_to_s_proc [nil, Proc] default: nil, e.g. ->(*record) { "record id: #{record.first.id}" }
12
+ # @param args_max_length [Integer] default: 1_000,
13
+ # @param colorized_chain_for_method [false, Proc] default: false, e.g. ->(colorized_string) { colorized_string.red.on_blue.underline }
14
+ # @param colorized_chain_for_class [false, Proc] default: false, e.g. ->(colorized_string) { colorized_string.colorize(:light_blue ).colorize( :background => :red) }
15
+ # @param add_invocation_id [true, false] default: true, allows unique identification of method call; association of entry and exit log lines
16
+ # @param ellipsis [String] default: " ✂️ …".freeze,
17
+ # @param mark_scope_exit [true, false] default: false,
18
+ # @param add_payload [true, false, Proc] default: true, # Can also be a proc returning a string, which will be called when printing the payload
19
+ # @param payload_max_length [Integer] default: 1_000,
20
+ # @param error_handler_proc [nil, Proc] default: nil,
21
+ # @param time_formatter_proc [nil, Proc] default: DebugLogging::Constants::DEFAULT_TIME_FORMATTER,
22
+ # @param add_timestamp [true, false] default: false,
23
+ # @param instance_benchmarks [true, false] default: false,
24
+ # @param class_benchmarks [true, false] default: false,
3
25
  def i_logged(*methods_to_log)
4
26
  methods_to_log, payload, config_opts = DebugLogging::Util.extract_payload_and_config(
5
27
  method_names: methods_to_log,
@@ -28,19 +28,22 @@ module DebugLogging
28
28
  method_to_log: method_to_log,
29
29
  config_proxy: config_proxy,
30
30
  )
31
- invocation_id = self.class.debug_invocation_id_to_s(args:, kwargs:, config_proxy:)
31
+ start_at = Time.now
32
+ start_timestamp = self.class.debug_time_to_s(start_at, config_proxy:)
33
+ invocation_id = self.class.debug_invocation_id_to_s(args:, kwargs:, start_at:, config_proxy:)
32
34
  config_proxy.log do
33
35
  paydirt = DebugLogging::Util.payload_instance_variable_hydration(scope: self, payload: method_payload)
34
36
  signature = self.class.debug_signature_to_s(args:, kwargs:, config_proxy:)
35
37
  paymud = debug_payload_to_s(payload: paydirt, config_proxy:)
36
- "#{log_prefix}#{signature}#{invocation_id} debug: #{paymud}"
38
+ "#{start_timestamp}#{log_prefix}#{signature}#{invocation_id} debug: #{paymud}"
37
39
  end
38
40
  if config_proxy.benchmarkable_for?(:debug_instance_benchmarks)
39
41
  tms = Benchmark.measure do
40
42
  method_return_value = super(*args, **kwargs, &block)
41
43
  end
44
+ end_timestamp = self.class.debug_time_to_s(Time.now, config_proxy:)
42
45
  config_proxy.log do
43
- "#{log_prefix} #{self.class.debug_benchmark_to_s(tms: tms)}#{invocation_id}"
46
+ "#{end_timestamp}#{log_prefix} #{self.class.debug_benchmark_to_s(tms: tms)}#{invocation_id}"
44
47
  end
45
48
  else
46
49
  begin
@@ -53,8 +56,9 @@ module DebugLogging
53
56
  end
54
57
  end
55
58
  if config_proxy.exit_scope_markable? && invocation_id && !invocation_id.empty?
59
+ end_timestamp = self.class.debug_time_to_s(Time.now, config_proxy:)
56
60
  config_proxy.log do
57
- "#{log_prefix} completed#{invocation_id}"
61
+ "#{end_timestamp}#{log_prefix} completed#{invocation_id}"
58
62
  end
59
63
  end
60
64
  end
@@ -32,8 +32,8 @@ module DebugLogging
32
32
  {
33
33
  name: event.name,
34
34
  duration: Rational(event.duration, 1000).to_f,
35
- time: debug_time_to_s(event.time),
36
- end: debug_time_to_s(event.end),
35
+ time: debug_event_time_to_s(event.time),
36
+ end: debug_event_time_to_s(event.end),
37
37
  args: debug_signature_to_s(args: args, config_proxy: config_proxy),
38
38
  payload: debug_payload_to_s(payload: payload, config_proxy: config_proxy),
39
39
  }
@@ -2,6 +2,20 @@ module DebugLogging
2
2
  module Util
3
3
  module_function
4
4
 
5
+ def debug_time(time_or_monotonic)
6
+ case time_or_monotonic
7
+ when Time, DateTime
8
+ time_or_monotonic
9
+ when Numeric
10
+ Time.at(time_or_monotonic)
11
+ when String
12
+ Time.parse(time_or_monotonic)
13
+ else
14
+ # Garbage in, Sweet Nourishing Gruel Out
15
+ Time.now
16
+ end
17
+ end
18
+
5
19
  # methods_to_log may be an array of a single method name, followed by config options and payload,
6
20
  # or it could be an array of method names followed by config options and payload to be shared by the whole set.
7
21
  def extract_payload_and_config(method_names:, payload: nil, config: nil)
@@ -36,6 +50,8 @@ module DebugLogging
36
50
  # logged :meth1, :meth2, :meth3 without options is valid
37
51
  method_names
38
52
  end
53
+ else
54
+ raise ArgumentError, "unknown type for method_names: #{method_names.class}"
39
55
  end
40
56
  [method_names, payload, config_opts]
41
57
  end
@@ -1,5 +1,5 @@
1
1
  module DebugLogging
2
2
  module Version
3
- VERSION = "4.0.0"
3
+ VERSION = "4.0.1"
4
4
  end
5
5
  end
data/lib/debug_logging.rb CHANGED
@@ -233,6 +233,22 @@ module DebugLogging
233
233
  @debug_logging_configuration.colorized_chain_for_class = colorized_chain_for_class
234
234
  end
235
235
 
236
+ def debug_add_timestamp
237
+ @debug_logging_configuration.add_timestamp
238
+ end
239
+
240
+ def debug_add_timestamp=(add_timestamp)
241
+ @debug_logging_configuration.add_timestamp = add_timestamp
242
+ end
243
+
244
+ def debug_time_formatter_proc
245
+ @debug_logging_configuration.time_formatter_proc
246
+ end
247
+
248
+ def debug_time_formatter_proc=(time_formatter_proc)
249
+ @debug_logging_configuration.time_formatter_proc = time_formatter_proc
250
+ end
251
+
236
252
  def debug_add_invocation_id
237
253
  @debug_logging_configuration.add_invocation_id
238
254
  end
data.tar.gz.sig CHANGED
Binary file
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: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
@@ -38,7 +38,7 @@ cert_chain:
38
38
  KuxrfYrN+9HvMdm+nZ6TypmKftHY3Gj+/uu+g8Icm/zrvTWAEE0mcJOkfrIoNPJb
39
39
  pF8dMA==
40
40
  -----END CERTIFICATE-----
41
- date: 2024-02-28 00:00:00.000000000 Z
41
+ date: 2024-03-01 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: colorize
@@ -319,10 +319,10 @@ licenses:
319
319
  - MIT
320
320
  metadata:
321
321
  homepage_uri: https://github.com/pboling/debug_logging
322
- source_code_uri: https://github.com/pboling/debug_logging/tree/v4.0.0
323
- changelog_uri: https://github.com/pboling/debug_logging/blob/v4.0.0/CHANGELOG.md
322
+ source_code_uri: https://github.com/pboling/debug_logging/tree/v4.0.1
323
+ changelog_uri: https://github.com/pboling/debug_logging/blob/v4.0.1/CHANGELOG.md
324
324
  bug_tracker_uri: https://github.com/pboling/debug_logging/issues
325
- documentation_uri: https://www.rubydoc.info/gems/debug_logging/4.0.0
325
+ documentation_uri: https://www.rubydoc.info/gems/debug_logging/4.0.1
326
326
  wiki_uri: https://github.com/pboling/debug_logging/wiki
327
327
  funding_uri: https://liberapay.com/pboling
328
328
  rubygems_mfa_required: 'true'
metadata.gz.sig CHANGED
Binary file