debug_logging 0.1.0 → 1.0.0

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
  SHA1:
3
- metadata.gz: a2354763d5bcb6438947c4e268683c956477b812
4
- data.tar.gz: 2c0c20aff357b165857f6c7794bb54e87e2b7ac3
3
+ metadata.gz: 74f20737ddaf59151ab3118f196f2d811cfe4687
4
+ data.tar.gz: 21a1c19d58110b20436788e74f94c2c5fdc62c10
5
5
  SHA512:
6
- metadata.gz: b6312e56ce69f08fa23d1e57c24b7e10354e4f971304b6dbed74d3232cb2593d1ccff250f0e5eebc51e24edf80c60c646c8f636cdf135a7d8d1967289903334d
7
- data.tar.gz: 987ea132ee891882e14a1bee41bbe47084700468767588e21eaa2a487098178613b36592d0f69e17c55fdfcad9bd1a175a0613bea9b5064bf028212fd53ab6a2
6
+ metadata.gz: 7ebb58f828a34bfa2be6c31228c977dd08e796070c2af386781efaf434d5453b7d333552908f47f8e3df5fe6a2a56148499f14d364c203cf1210309f54fa7378
7
+ data.tar.gz: ee69b5dab10dbb4a5a076bd62ee0d3540747201d41e7bbf22b5b71d11321c2db5dce2bbb44cbc2afb08bd2bb93a5928a24cfce9e4872d49942c327f1907b77a3
data/.byebug_history ADDED
@@ -0,0 +1,4 @@
1
+ exit
2
+ @debug_logging_configuration
3
+ debug_logging_configuration
4
+ debug_class_benchmarks
data/README.md CHANGED
@@ -41,45 +41,75 @@ Crack open the specs for usage examples.
41
41
  ### Without Rails
42
42
 
43
43
  It just works. ;)
44
- Configuration can go anywhere you want.
44
+ Configuration can go anywhere you want. It will look like the Rails config though; see below.
45
45
 
46
46
  ### With Rails
47
47
 
48
48
  Recommend creating `config/initializers/debug_logging.rb` with:
49
+
49
50
  ```ruby
50
51
  # Showing the defaults
51
- DebugLogging.logger = Logger.new(STDOUT) # you probably want to override to be the Rails.logger
52
- DebugLogging.log_level = :debug # at what level do the messages created by this gem sent at?
53
- DebugLogging.last_hash_to_s_proc = nil # e.g. ->(hash) { "#{hash.keys}" }
54
- DebugLogging.last_hash_max_length = 1_000
55
- DebugLogging.args_max_length = 1_000
56
- DebugLogging.instance_benchmarks = false
57
- DebugLogging.class_benchmarks = false
58
- DebugLogging.add_invocation_id = true # invocation id allows you to identify a method call uniquely in a log
59
- DebugLogging.ellipsis = " ✂️ …".freeze
52
+ DebugLogging.configuration.logger = Logger.new(STDOUT) # you probably want to override to be the Rails.logger
53
+ DebugLogging.configuration.log_level = :debug # at what level do the messages created by this gem sent at?
54
+ DebugLogging.configuration.last_hash_to_s_proc = nil # e.g. ->(hash) { "keys: #{hash.keys}" }
55
+ DebugLogging.configuration.last_hash_max_length = 1_000
56
+ DebugLogging.configuration.args_max_length = 1_000
57
+ DebugLogging.configuration.instance_benchmarks = false
58
+ DebugLogging.configuration.class_benchmarks = false
59
+ DebugLogging.configuration.add_invocation_id = true # invocation id allows you to identify a method call uniquely in a log
60
+ DebugLogging.configuration.ellipsis = " ✂️ …".freeze
61
+ ```
62
+
63
+ If you prefer to use the block style:
64
+
65
+ ```ruby
66
+ DebugLogging.configure do |config|
67
+ config.logger = Logger.new(STDOUT) # probably want to override to be the Rails.logger
68
+ config.log_level = :debug # at what level do the messages created by this gem sent at?
69
+ config.last_hash_to_s_proc = nil # e.g. ->(hash) { "keys: #{hash.keys}" }
70
+ config.last_hash_max_length = 1_000
71
+ config.args_max_length = 1_000
72
+ config.instance_benchmarks = false
73
+ config.class_benchmarks = false
74
+ config.add_invocation_id = true # invocation id allows you to identify a method call uniquely in a log
75
+ config.ellipsis = " ✂️ …".freeze
76
+ end
60
77
  ```
61
78
 
79
+ **All** of the above **config** is **inheritable** and **configurable** at the **per-class** level as well!
80
+ Just prepend `debug_` to any config value you want to override in a class.
81
+
82
+ Every time a method is called, get logs, optionally with arguments, a benchmarck, and a unique invocation identifier:
83
+
62
84
  ```ruby
63
85
  class Car
64
86
 
87
+ # adds the helper methods to the class, all are prefixed with debug_*,
88
+ # except for the logged class method, which comes from extending DebugLogging::ClassLogger
89
+ extend DebugLogging
90
+
91
+ # per class configuration overrides!
92
+ self.debug_class_benchmarks = true
93
+ self.debug_instance_benchmarks = true
94
+
65
95
  # For instance methods:
66
96
  # Option 1: specify the exact method(s) to add logging to
67
97
  include DebugLogging::InstanceLogger.new(i_methods: [:drive, :stop])
68
-
98
+
69
99
  extend DebugLogging::ClassLogger
70
-
71
- logged def self.make; new; end
72
- def self.design(*args); new; end
73
- def self.safety(*args); new; end
100
+
101
+ logged def debug_make; new; end
102
+ def design(*args); new; end
103
+ def safety(*args); new; end
74
104
  logged :design, :safety
75
-
105
+
76
106
  def drive(speed); speed; end
77
107
  def stop; 0; end
78
-
108
+
79
109
  # For instance methods:
80
110
  # Option 2: add logging to all instance methods defined above (but *not* defined below)
81
- include DebugLogging::InstanceLogger.new(i_methods: self.instance_methods(false))
82
-
111
+ include DebugLogging::InstanceLogger.new(i_methods: debug_instance_methods(false))
112
+
83
113
  def will_not_be_logged; false; end
84
114
 
85
115
  end
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_development_dependency "rspec-pending_for"
24
+ spec.add_development_dependency "byebug", "~> 9.0"
24
25
  spec.add_development_dependency "bundler", "~> 1.14"
25
26
  spec.add_development_dependency "rake", "~> 10.0"
26
27
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -1,28 +1,27 @@
1
1
  module DebugLogging
2
2
  module ArgumentPrinter
3
- def self.to_s(args)
4
- length = 0
5
- if DebugLogging.last_hash_to_s_proc && args[-1].is_a?(Hash)
3
+ def debug_arguments_to_s(args)
4
+ if debug_last_hash_to_s_proc && args[-1].is_a?(Hash)
6
5
  if args.length > 1
7
6
  add_args_ellipsis = false
8
7
  add_last_hash_ellipsis = false
9
- printed_args = args[0..(-2)].map {|x| x.inspect}.join(", ").tap {|x| add_args_ellipsis = x.length > DebugLogging.args_max_length}[0..(DebugLogging.args_max_length)]
10
- printed_args << DebugLogging.ellipsis if add_args_ellipsis
11
- printed_args << ", " << DebugLogging.last_hash_to_s_proc.call(args[-1]).tap {|x| add_last_hash_ellipsis = x.length > DebugLogging.last_hash_max_length}[0..(DebugLogging.last_hash_max_length)]
12
- printed_args << DebugLogging.ellipsis if add_last_hash_ellipsis
8
+ printed_args = args[0..(-2)].map {|x| x.inspect}.join(", ").tap {|x| add_args_ellipsis = x.length > debug_args_max_length}[0..(debug_args_max_length)]
9
+ printed_args << debug_ellipsis if add_args_ellipsis
10
+ printed_args << ", " << debug_last_hash_to_s_proc.call(args[-1]).tap {|x| add_last_hash_ellipsis = x.length > debug_last_hash_max_length}[0..(debug_last_hash_max_length)]
11
+ printed_args << debug_ellipsis if add_last_hash_ellipsis
13
12
  else
14
- printed_args = DebugLogging.last_hash_to_s_proc.call(args[0]).tap {|x| add_last_hash_ellipsis = x.length > DebugLogging.last_hash_max_length}[0..(DebugLogging.last_hash_max_length)]
15
- printed_args << DebugLogging.ellipsis if add_last_hash_ellipsis
13
+ printed_args = debug_last_hash_to_s_proc.call(args[0]).tap {|x| add_last_hash_ellipsis = x.length > debug_last_hash_max_length}[0..(debug_last_hash_max_length)]
14
+ printed_args << debug_ellipsis if add_last_hash_ellipsis
16
15
  end
17
16
  else
18
17
  add_args_ellipsis = false
19
18
  if args.length == 1 && args[0].is_a?(Hash)
20
19
  # handle double splat
21
- printed_args = ("**" << args.map {|x| x.inspect}.join(", ").tap {|x| add_args_ellipsis = x.length > DebugLogging.args_max_length})[0..(DebugLogging.args_max_length)]
20
+ printed_args = ("**" << args.map {|x| x.inspect}.join(", ").tap {|x| add_args_ellipsis = x.length > debug_args_max_length})[0..(debug_args_max_length)]
22
21
  else
23
- printed_args = args.map {|x| x.inspect}.join(", ").tap {|x| add_args_ellipsis = x.length > DebugLogging.args_max_length}[0..(DebugLogging.args_max_length)]
22
+ printed_args = args.map {|x| x.inspect}.join(", ").tap {|x| add_args_ellipsis = x.length > debug_args_max_length}[0..(debug_args_max_length)]
24
23
  end
25
- printed_args << DebugLogging.ellipsis if add_args_ellipsis
24
+ printed_args << debug_ellipsis if add_args_ellipsis
26
25
  end
27
26
  "(#{printed_args})"
28
27
  end
@@ -2,18 +2,19 @@ module DebugLogging
2
2
  module ClassLogger
3
3
  def logged(*methods_to_log)
4
4
  methods_to_log.each do |method_to_log|
5
- # method name will always be a symbol
5
+ # method name must be a symbol
6
+ method_to_log = method_to_log.to_sym
6
7
  original_method = method(method_to_log)
7
8
  (class << self; self; end).class_eval do
8
9
  define_method(method_to_log) do |*args|
9
10
  method_return_value = nil
10
- invocation_id = " ~#{args.object_id}@#{Time.now.to_i}~" if DebugLogging.add_invocation_id && args
11
- DebugLogging.log "#{self}.#{method_to_log}#{ArgumentPrinter.to_s(args)}#{invocation_id}"
12
- if DebugLogging.class_benchmarks
11
+ invocation_id = " ~#{args.object_id}@#{Time.now.to_i}~" if debug_add_invocation_id
12
+ debug_log "#{self}.#{method_to_log}#{debug_arguments_to_s(args)}#{invocation_id}"
13
+ if debug_class_benchmarks
13
14
  elapsed = Benchmark.realtime do
14
15
  method_return_value = original_method.call(*args)
15
16
  end
16
- DebugLogging.log "#{self}.#{method_to_log} completed in #{sprintf("%f", elapsed)}s#{invocation_id}"
17
+ debug_log "#{self}.#{method_to_log} completed in #{sprintf("%f", elapsed)}s#{invocation_id}"
17
18
  else
18
19
  method_return_value = original_method.call(*args)
19
20
  end
@@ -0,0 +1,32 @@
1
+ module DebugLogging
2
+ class Configuration
3
+ attr_accessor :logger
4
+ attr_accessor :log_level
5
+ attr_accessor :last_hash_to_s_proc
6
+ attr_accessor :last_hash_max_length
7
+ attr_accessor :args_max_length
8
+ attr_accessor :instance_benchmarks
9
+ attr_accessor :class_benchmarks
10
+ attr_accessor :add_invocation_id
11
+ attr_accessor :ellipsis
12
+ def initialize
13
+ @logger = Logger.new(STDOUT)
14
+ @log_level = :debug
15
+ @last_hash_to_s_proc = nil
16
+ @last_hash_max_length = 1_000
17
+ @args_max_length = 1_000
18
+ @instance_benchmarks = false
19
+ @class_benchmarks = false
20
+ @add_invocation_id = true
21
+ @ellipsis = " ✂️ …".freeze
22
+ end
23
+ def instance_benchmarks=(instance_benchmarks)
24
+ require "benchmark" if instance_benchmarks
25
+ @instance_benchmarks = instance_benchmarks
26
+ end
27
+ def class_benchmarks=(class_benchmarks)
28
+ require "benchmark" if class_benchmarks
29
+ @class_benchmarks = class_benchmarks
30
+ end
31
+ end
32
+ end
@@ -5,6 +5,7 @@ module DebugLogging
5
5
  end
6
6
  def included(base)
7
7
  if @instance_methods_to_log
8
+ base.send(:include, ArgumentPrinter)
8
9
  instance_method_logger = DebugLogging::InstanceLoggerModulizer.to_mod(@instance_methods_to_log)
9
10
  base.send(:prepend, instance_method_logger)
10
11
  end
@@ -3,15 +3,16 @@ module DebugLogging
3
3
  def self.to_mod(methods_to_log = [])
4
4
  Module.new do
5
5
  Array(methods_to_log).each do |method_to_log|
6
+ # method name must be a symbol
6
7
  define_method(method_to_log.to_sym) do |*args, &block|
7
8
  method_return_value = nil
8
- invocation_id = " ~#{args.object_id}@#{Time.now.to_i}~" if DebugLogging.add_invocation_id && args
9
- DebugLogging.log "#{self.class}##{method_to_log}#{DebugLogging::ArgumentPrinter.to_s(args)}#{invocation_id}"
10
- if DebugLogging.instance_benchmarks
9
+ invocation_id = " ~#{args.object_id}@#{Time.now.to_i}~" if self.class.debug_add_invocation_id && args
10
+ self.class.debug_log "#{self.class}##{method_to_log}#{self.class.debug_arguments_to_s(args)}#{invocation_id}"
11
+ if self.class.debug_instance_benchmarks
11
12
  elapsed = Benchmark.realtime do
12
13
  method_return_value = super(*args, &block)
13
14
  end
14
- DebugLogging.log "#{self.class}##{method_to_log} completed in #{sprintf("%f", elapsed)}s#{invocation_id}"
15
+ self.class.debug_log "#{self.class}##{method_to_log} completed in #{sprintf("%f", elapsed)}s#{invocation_id}"
15
16
  else
16
17
  method_return_value = super(*args, &block)
17
18
  end
@@ -1,3 +1,3 @@
1
1
  module DebugLogging
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/debug_logging.rb CHANGED
@@ -1,16 +1,11 @@
1
1
  require "logger"
2
2
  require "debug_logging/version"
3
+ require "debug_logging/configuration"
3
4
  require "debug_logging/argument_printer"
4
5
  require "debug_logging/instance_logger_modulizer"
5
6
  require "debug_logging/instance_logger"
6
7
  require "debug_logging/class_logger"
7
8
 
8
- ####################
9
- # #
10
- # Next Level Magic #
11
- # Classes inheriting from Module.
12
- # Cats and dogs sleeping together.
13
- # #
14
9
  ####################
15
10
  # #
16
11
  # NOTE: The manner this is made to work for class methods is totally different
@@ -24,15 +19,23 @@ require "debug_logging/class_logger"
24
19
  # #
25
20
  # class Car
26
21
  #
22
+ # # adds the helper methods to the class, all are prefixed with debug_*,
23
+ # # except for the logged class method, which comes from extending DebugLogging::ClassLogger
24
+ # extend DebugLogging
25
+ #
26
+ # # per class configuration overrides!
27
+ # self.debug_class_benchmarks = true
28
+ # self.debug_instance_benchmarks = true
29
+ #
27
30
  # # For instance methods:
28
31
  # # Option 1: specify the exact method(s) to add logging to
29
32
  # include DebugLogging::InstanceLogger.new(i_methods: [:drive, :stop])
30
33
  #
31
34
  # extend DebugLogging::ClassLogger
32
35
  #
33
- # logged def self.make; new; end
34
- # def self.design(*args); new; end
35
- # def self.safety(*args); new; end
36
+ # logged def debug_make; new; end
37
+ # def design(*args); new; end
38
+ # def safety(*args); new; end
36
39
  # logged :design, :safety
37
40
  #
38
41
  # def drive(speed); speed; end
@@ -40,7 +43,7 @@ require "debug_logging/class_logger"
40
43
  #
41
44
  # # For instance methods:
42
45
  # # Option 2: add logging to all instance methods defined above (but *not* defined below)
43
- # include DebugLogging::InstanceLogger.new(i_methods: self.instance_methods(false))
46
+ # include DebugLogging::InstanceLogger.new(i_methods: debug_instance_methods(false))
44
47
  #
45
48
  # def will_not_be_logged; false; end
46
49
  #
@@ -49,75 +52,93 @@ require "debug_logging/class_logger"
49
52
  ####################
50
53
 
51
54
  module DebugLogging
52
- def self.config_reset
53
- @@logger = nil
54
- @@log_level = :debug
55
- @@last_hash_to_s_proc = nil
56
- @@last_hash_max_length = 1_000
57
- @@args_max_length = 1_000
58
- @@instance_benchmarks = false
59
- @@class_benchmarks = false
60
- @@add_invocation_id = true
61
- @@ellipsis = " ✂️ …".freeze
55
+ def self.extended(base)
56
+ base.send(:extend, ArgumentPrinter)
57
+ base.debug_config_reset(debug_logging_configuration.dup)
58
+ end
59
+
60
+ #### API ####
61
+ def debug_log(message)
62
+ debug_logger.send(debug_log_level, message)
63
+ end
64
+
65
+ # For single statement global config in an initializer
66
+ # e.g. DebugLogging.configuration.ellipsis = "..."
67
+ def self.configuration
68
+ self.debug_logging_configuration ||= Configuration.new
69
+ end
70
+
71
+ # For global config in an initializer with a block
72
+ def self.configure
73
+ yield(configuration)
74
+ end
75
+
76
+ # For per-class config with a block
77
+ def debug_logging_configure
78
+ @debug_logging_configuration ||= Configuration.new
79
+ yield(@debug_logging_configuration)
80
+ end
81
+
82
+ #### CONFIG ####
83
+ class << self
84
+ attr_accessor :debug_logging_configuration
62
85
  end
63
- def self.logger
64
- @@logger ||= Logger.new(STDOUT)
86
+ def debug_config_reset(config = Configuration.new)
87
+ @debug_logging_configuration = config
65
88
  end
66
- def self.logger=(logger)
67
- @@logger = logger
89
+ def debug_logger
90
+ @debug_logging_configuration.logger
68
91
  end
69
- def self.log_level
70
- @@log_level || :debug
92
+ def debug_logger=(logger)
93
+ @debug_logging_configuration.logger = logger
71
94
  end
72
- def self.log_level=(log_level)
73
- @@log_level = log_level
95
+ def debug_log_level
96
+ @debug_logging_configuration.log_level
74
97
  end
75
- def self.last_hash_to_s_proc
76
- @@last_hash_to_s_proc
98
+ def debug_log_level=(log_level)
99
+ @debug_logging_configuration.log_level = log_level
77
100
  end
78
- def self.last_hash_to_s_proc=(last_hash_to_s_proc)
79
- @@last_hash_to_s_proc = last_hash_to_s_proc
101
+ def debug_last_hash_to_s_proc
102
+ @debug_logging_configuration.last_hash_to_s_proc
80
103
  end
81
- def self.last_hash_max_length
82
- @@last_hash_max_length || 1_000
104
+ def debug_last_hash_to_s_proc=(last_hash_to_s_proc)
105
+ @debug_logging_configuration.last_hash_to_s_proc = last_hash_to_s_proc
83
106
  end
84
- def self.last_hash_max_length=(last_hash_max_length)
85
- @@last_hash_max_length = last_hash_max_length
107
+ def debug_last_hash_max_length
108
+ @debug_logging_configuration.last_hash_max_length
86
109
  end
87
- def self.args_max_length
88
- @@args_max_length || 1_000
110
+ def debug_last_hash_max_length=(last_hash_max_length)
111
+ @debug_logging_configuration.last_hash_max_length = last_hash_max_length
89
112
  end
90
- def self.args_max_length=(args_max_length)
91
- @@args_max_length = args_max_length
113
+ def debug_args_max_length
114
+ @debug_logging_configuration.args_max_length
92
115
  end
93
- def self.instance_benchmarks
94
- @@instance_benchmarks
116
+ def debug_args_max_length=(args_max_length)
117
+ @debug_logging_configuration.args_max_length = args_max_length
95
118
  end
96
- def self.instance_benchmarks=(instance_benchmarks)
97
- require "benchmark" if instance_benchmarks
98
- @@instance_benchmarks = instance_benchmarks
119
+ def debug_instance_benchmarks
120
+ @debug_logging_configuration.instance_benchmarks
99
121
  end
100
- def self.class_benchmarks
101
- @@class_benchmarks
122
+ def debug_instance_benchmarks=(instance_benchmarks)
123
+ @debug_logging_configuration.instance_benchmarks = instance_benchmarks
102
124
  end
103
- def self.class_benchmarks=(class_benchmarks)
104
- require "benchmark" if class_benchmarks
105
- @@class_benchmarks = class_benchmarks
125
+ def debug_class_benchmarks
126
+ @debug_logging_configuration.class_benchmarks
106
127
  end
107
- def self.add_invocation_id
108
- @@add_invocation_id
128
+ def debug_class_benchmarks=(class_benchmarks)
129
+ @debug_logging_configuration.class_benchmarks = class_benchmarks
109
130
  end
110
- def self.add_invocation_id=(add_invocation_id)
111
- @@add_invocation_id = add_invocation_id
131
+ def debug_add_invocation_id
132
+ @debug_logging_configuration.add_invocation_id
112
133
  end
113
- def self.ellipsis
114
- @@ellipsis
134
+ def debug_add_invocation_id=(add_invocation_id)
135
+ @debug_logging_configuration.add_invocation_id = add_invocation_id
115
136
  end
116
- def self.ellipsis=(ellipsis)
117
- @@ellipsis = ellipsis
137
+ def debug_ellipsis
138
+ @debug_logging_configuration.ellipsis
118
139
  end
119
- def self.log(message)
120
- logger.send(log_level, message)
140
+ def debug_ellipsis=(ellipsis)
141
+ @debug_logging_configuration.ellipsis = ellipsis
121
142
  end
122
- config_reset # setup defaults
143
+ self.debug_logging_configuration = Configuration.new # setup defaults
123
144
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debug_logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-25 00:00:00.000000000 Z
11
+ date: 2017-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-pending_for
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: byebug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '9.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '9.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -73,6 +87,7 @@ executables: []
73
87
  extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
90
+ - ".byebug_history"
76
91
  - ".gitignore"
77
92
  - ".rspec"
78
93
  - ".travis.yml"
@@ -85,6 +100,7 @@ files:
85
100
  - lib/debug_logging.rb
86
101
  - lib/debug_logging/argument_printer.rb
87
102
  - lib/debug_logging/class_logger.rb
103
+ - lib/debug_logging/configuration.rb
88
104
  - lib/debug_logging/instance_logger.rb
89
105
  - lib/debug_logging/instance_logger_modulizer.rb
90
106
  - lib/debug_logging/version.rb