lumber 1.2.1 → 1.2.2

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: 9b851ac9729e2f6429855786a0561d1980d8b061
4
- data.tar.gz: 2d34268ac57fbe53cb0ee3d7911b4eda32a50cff
3
+ metadata.gz: af1ccbaa821fdc83ded7a553efcaeb418d6f4614
4
+ data.tar.gz: ab1025e6e0560a6b8cf7432a55ef497ac60fdfcf
5
5
  SHA512:
6
- metadata.gz: 60beb8ea7f905311f5e3c978833a6d127e40b69457336ee14be84e8e53e718ba264ab5cb5c3e4d60f004f995c1ce8bc2129be8724558f9947884479a1ac162e6
7
- data.tar.gz: 18e65b67e94b15be7405a5463b06fe66ec5ad3da7d87a8d6e62a196d67fc498e820dd317c201ba3d08b403683e124b576b668746aa3c7fe825a10fd284901de1
6
+ metadata.gz: 87932480d522328bca72bc535ef8ff0024756ba85ba4ee20425bd0dd654e68677150241eee817a137b66e7d982df89b74c2522b478646a05df5875901203c500
7
+ data.tar.gz: 5d8c600adb7541d9822ae8a7b3efec363d6bec494c7faec2675f6d1f89832a43f1ff37fb940154889b66d3691802d3e148cfda72542e8f0e35e568e41db93b2c
@@ -2,7 +2,7 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
- - 2.1.1
5
+ - 2.1.2
6
6
  - jruby-19mode # JRuby in 1.9 mode
7
7
  - rbx
8
8
  before_script:
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ 1.2.2 (08/29/2014)
2
+ ------------------
3
+
4
+ Pluggable logger concerns - pull request #11 from ANorwell/logger_concerns <03d0724> [Matt Conway]
5
+ fix tests for newer rspec <033c3d6> [Matt Conway]
6
+ test against 2.1.2 <8c40685> [Matt Conway]
7
+
1
8
  1.2.1 (03/13/2014)
2
9
  ------------------
3
10
 
data/README.md CHANGED
@@ -19,7 +19,7 @@ To enable lumber in your rails project, add to your config/application.rb:
19
19
 
20
20
  # To expose custom variables in log4r.yml
21
21
  # config.lumber.some_option = "some_value
22
- # you can set default_log_level here, config/environments/*.rb or in config/log4r.yml
22
+ # you can set default_log_level here, config/environments/*.rb or in config/log4r.yml
23
23
  # config.log_level = :debug
24
24
  # enabling lumber sets config.logger to Log4r::Logger['rails']
25
25
  config.lumber.enabled = true
@@ -30,25 +30,44 @@ You should be able to use lumber in a non-rails project too, but you will have t
30
30
  #
31
31
  require 'lumber'
32
32
  Lumber.init(:root => "/my/project", :env => "development")
33
-
33
+
34
34
  # Setup parent loggers for some known rails Base classes. Classes that inherit
35
35
  # from these will have their logger as a parent so you can configure logging for
36
36
  # subtrees of classes in log4r.yml
37
37
  Lumber.setup_logger_hierarchy("ActiveRecord::Base", "rails::models")
38
38
  Lumber.setup_logger_hierarchy("ActionController::Base", "rails::controllers")
39
39
  Lumber.setup_logger_hierarchy("ActionMailer::Base", "rails::mailers")
40
-
40
+
41
41
  # If you really want, you can make all classes have a logger
42
42
  # Lumber.setup_logger_hierarchy("Object", "root::object")
43
43
 
44
- Additionally, you can also add loggers to individual classes by including the LumberLoggerSupport module
44
+ Additionally, you can also add loggers to individual classes by including the Lumber::LoggerSupport module
45
45
 
46
46
  class Foo
47
47
  include Lumber::LoggerSupport
48
48
  end
49
49
 
50
- and Foo.logger/Foo.new.logger will log to a logger named "rails::Foo". This creates a heirarchy of loggers for classes
51
- nested within modules, so you can use the namespace to enable/disable loggers
50
+ and Foo.logger/Foo.new.logger will log to a logger named "rails::Foo". This creates a hierarchy of loggers for classes
51
+ nested within modules, so you can use the namespace to enable/disable loggers.
52
+
53
+ The logger concern used by Lumber is customizeable:
54
+
55
+ module MyLoggerConcern
56
+ extend ActiveSupport::Concern
57
+ include Lumber::LoggerSupport
58
+
59
+ # an example custom logging function
60
+ def log_error(error)
61
+ logger.error("ERROR: #{error}")
62
+ end
63
+ end
64
+
65
+ This custom logger concern should be registered in an initializer so that it is available dynamically:
66
+
67
+ # before Rails::Initializer.run
68
+ #
69
+ require 'lumber'
70
+ Lumber.logger_concern = MyLoggerConcern
52
71
 
53
72
  If you want to change the log level for a different environment, you can do so in log4r.yml or by using the standard rails "config.log_level" setting in config/environments/<env>.rb
54
73
 
@@ -2,9 +2,9 @@ $:.unshift(File.dirname(__FILE__))
2
2
 
3
3
  # before config block
4
4
  require "monitor"
5
+ require "lumber/logger_support"
5
6
  require "lumber/lumber"
6
7
  require "lumber/inheritance_registry"
7
- require "lumber/logger_support"
8
8
  require "lumber/log4r"
9
9
  require "lumber/level_util"
10
10
  require "lumber/json_formatter"
@@ -66,7 +66,7 @@ module Lumber
66
66
  # Also prevent rails from subsequently overriding our logger when rails
67
67
  # is loaded after registering logger inheritance
68
68
  if Lumber::InheritanceRegistry[subclass.name]
69
- subclass.send(:include, Lumber::LoggerSupport)
69
+ subclass.send(:include, Lumber.logger_concern)
70
70
  end
71
71
  end
72
72
 
@@ -81,4 +81,4 @@ module Lumber
81
81
 
82
82
  end
83
83
 
84
- end
84
+ end
@@ -28,6 +28,10 @@ module Lumber
28
28
  extend MonitorMixin
29
29
  extend self
30
30
 
31
+ # The logger concern (ActiveSupport::Concern) to include in each class.
32
+ attr_accessor :logger_concern
33
+ self.logger_concern = Lumber::LoggerSupport
34
+
31
35
  # Initializes log4r system. Needs to happen in
32
36
  # config/environment.rb before Rails::Initializer.run
33
37
  #
@@ -40,6 +44,7 @@ module Lumber
40
44
  # * :monitor_enabled - defaults to true
41
45
  # * :monitor_interval - defaults to 60
42
46
  # * :monitor_store - defaults to Rails.cache if defined, memory otherwise, see Lumber::LevelUtil::MemoryCacheProvider for interface
47
+ # * :logger_concern - the logger concern to include, defaults to Lumber::LoggerConcern
43
48
  #
44
49
  # All config options get passed through to the log4r
45
50
  # configurator for use in defining outputters
@@ -51,7 +56,7 @@ module Lumber
51
56
  opts[:log_file] ||= "#{opts[:root]}/log/#{opts[:env]}.log"
52
57
  opts[:monitor_enabled] = true unless opts[:monitor_enabled] == false
53
58
  opts[:monitor_interval] ||= 60
54
-
59
+
55
60
  raise "Lumber.init missing one of :root, :env" unless opts[:root] && opts[:env]
56
61
 
57
62
  cfg = Log4r::YamlConfigurator
@@ -62,6 +67,8 @@ module Lumber
62
67
 
63
68
  cfg.load_yaml_file(opts[:config_file])
64
69
 
70
+ self.logger_concern = opts[:logger_concern] if opts[:logger_concern]
71
+
65
72
  # Workaround for rails bug: http://dev.rubyonrails.org/ticket/8665
66
73
  if defined?(RAILS_DEFAULT_LOGGER)
67
74
  Object.send(:remove_const, :RAILS_DEFAULT_LOGGER)
@@ -123,7 +130,7 @@ module Lumber
123
130
  logger
124
131
  end
125
132
  end
126
-
133
+
127
134
  # Makes :logger exist independently for subclasses and sets that logger
128
135
  # to one that inherits from base_class for each subclass as it is created.
129
136
  # This allows you to have a finer level of control over logging, for example,
@@ -144,7 +151,7 @@ module Lumber
144
151
 
145
152
  begin
146
153
  clazz = class_name.constantize
147
- clazz.send(:include, Lumber::LoggerSupport)
154
+ clazz.send(:include, Lumber.logger_concern)
148
155
  rescue NameError
149
156
  # The class hasn't been defined yet. No problem, we register
150
157
  # the logger for when the class is created below
@@ -155,7 +162,7 @@ module Lumber
155
162
  Lumber::InheritanceRegistry[class_name] = class_logger_fullname
156
163
  end
157
164
 
158
- # Helper to make it easier to log context through log4r.yml
165
+ # Helper to make it easier to log context through log4r.yml
159
166
  def format_mdc()
160
167
  ctx = Log4r::MDC.get_context.collect {|k, v| k.to_s + "=" + v.to_s }.join(" ")
161
168
  ctx.gsub!('%', '%%')
@@ -1,3 +1,3 @@
1
1
  module Lumber
2
- VERSION = "1.2.1"
2
+ VERSION = "1.2.2"
3
3
  end
@@ -61,11 +61,11 @@ describe Lumber::InheritanceRegistry do
61
61
  describe "#remove_inheritance_handler" do
62
62
 
63
63
  it "should remove the handler" do
64
- defined?(Object.inherited_with_lumber_registry).should be_false
64
+ defined?(Object.inherited_with_lumber_registry).should be_falsey
65
65
  InheritanceRegistry.register_inheritance_handler
66
- defined?(Object.inherited_with_lumber_registry).should be_true
66
+ defined?(Object.inherited_with_lumber_registry).should be_truthy
67
67
  InheritanceRegistry.remove_inheritance_handler
68
- defined?(Object.inherited_with_lumber_registry).should be_false
68
+ defined?(Object.inherited_with_lumber_registry).should be_falsey
69
69
  end
70
70
 
71
71
  end
@@ -77,18 +77,18 @@ describe Lumber::InheritanceRegistry do
77
77
  end
78
78
 
79
79
  it "adds an inheritance handler" do
80
- defined?(Object.inherited_with_lumber_registry).should be_false
80
+ defined?(Object.inherited_with_lumber_registry).should be_falsey
81
81
  InheritanceRegistry.register_inheritance_handler
82
- defined?(Object.inherited_with_lumber_registry).should be_true
82
+ defined?(Object.inherited_with_lumber_registry).should be_truthy
83
83
  end
84
84
 
85
85
  it "doesn't add an inheritance handler multiple times" do
86
86
  Object.singleton_class.should_receive(:alias_method_chain).once.and_call_original
87
- defined?(Object.inherited_with_lumber_registry).should be_false
87
+ defined?(Object.inherited_with_lumber_registry).should be_falsey
88
88
  InheritanceRegistry.register_inheritance_handler
89
- defined?(Object.inherited_with_lumber_registry).should be_true
89
+ defined?(Object.inherited_with_lumber_registry).should be_truthy
90
90
  InheritanceRegistry.register_inheritance_handler
91
- defined?(Object.inherited_with_lumber_registry).should be_true
91
+ defined?(Object.inherited_with_lumber_registry).should be_truthy
92
92
  end
93
93
 
94
94
  it "doesn't change classes that aren't registered" do
@@ -81,16 +81,16 @@ describe Lumber do
81
81
  describe "#setup_logger_hierarchy" do
82
82
 
83
83
  it "should allow registering logger for a class before the class is defined" do
84
- defined?(Foo1).should be_false
84
+ defined?(Foo1).should be_falsey
85
85
  Lumber.setup_logger_hierarchy("Foo1", "root::foo1")
86
86
  new_class('Foo1')
87
87
  assert_valid_logger('Foo1', "root::foo1")
88
88
  end
89
89
 
90
90
  it "should not register new logger for subclasses of classes that delegate logger" do
91
- defined?(Foo1).should be_false # ActionController::Base
92
- defined?(Foo2).should be_false # ActionView::Base
93
- defined?(Foo3).should be_false # Subclass of ActionView::Base
91
+ defined?(Foo1).should be_falsey # ActionController::Base
92
+ defined?(Foo2).should be_falsey # ActionView::Base
93
+ defined?(Foo3).should be_falsey # Subclass of ActionView::Base
94
94
  Lumber.setup_logger_hierarchy("Foo1", "root::foo1")
95
95
  eval "class ::Foo1; end"
96
96
  eval "class ::Foo2; delegate :logger, :to => Foo1; end"
@@ -101,20 +101,20 @@ describe Lumber do
101
101
  end
102
102
 
103
103
  it "should no logger when parent is via delegate class" do
104
- defined?(Foo1).should be_false
105
- defined?(Foo2).should be_false
106
- defined?(Foo3).should be_false
104
+ defined?(Foo1).should be_falsey
105
+ defined?(Foo2).should be_falsey
106
+ defined?(Foo3).should be_falsey
107
107
  Lumber.setup_logger_hierarchy("Foo1", "root::foo1")
108
108
  eval "class ::Foo1; end"
109
109
  eval "class ::Foo2 < DelegateClass(Foo1); end"
110
110
  eval "class ::Foo3 < Foo2; end"
111
111
  assert_valid_logger('Foo1', "root::foo1")
112
- defined?(Foo3.logger).should be_false
112
+ defined?(Foo3.logger).should be_falsey
113
113
  end
114
114
 
115
115
  it "should allow registering independent loggers for classes in a hierarchy" do
116
- defined?(Foo1).should be_false
117
- defined?(Foo2).should be_false
116
+ defined?(Foo1).should be_falsey
117
+ defined?(Foo2).should be_falsey
118
118
  Lumber.setup_logger_hierarchy("Foo1", "root::foo1")
119
119
  Lumber.setup_logger_hierarchy("Foo2", "root::foo2")
120
120
  new_class('Foo1')
@@ -124,38 +124,38 @@ describe Lumber do
124
124
  end
125
125
 
126
126
  it "should allow registering logger for a nested class before the class is defined" do
127
- defined?(Bar1::Foo1).should be_false
127
+ defined?(Bar1::Foo1).should be_falsey
128
128
  Lumber.setup_logger_hierarchy("Bar1::Foo1", "root::foo1")
129
129
  new_class('Foo1', nil, 'Bar1')
130
130
  assert_valid_logger('Bar1::Foo1', "root::foo1")
131
131
  end
132
132
 
133
133
  it "should allow registering logger for a class after the class is defined" do
134
- defined?(Foo1).should be_false
134
+ defined?(Foo1).should be_falsey
135
135
  new_class('Foo1')
136
- defined?(Foo1).should be_true
136
+ defined?(Foo1).should be_truthy
137
137
 
138
138
  Lumber.setup_logger_hierarchy("Foo1", "root::Foo1")
139
139
  assert_valid_logger('Foo1', "root::Foo1")
140
140
  end
141
141
 
142
142
  it "should register loggers for subclasses of registered classes" do
143
- defined?(Foo1).should be_false
144
- defined?(Foo2).should be_false
145
- defined?(Foo3).should be_false
143
+ defined?(Foo1).should be_falsey
144
+ defined?(Foo2).should be_falsey
145
+ defined?(Foo3).should be_falsey
146
146
  Lumber.setup_logger_hierarchy("Foo1", "root::Foo1")
147
147
  new_class('Foo1')
148
148
  new_class('Foo2', 'Foo1')
149
149
  new_class('Foo3')
150
150
  assert_valid_logger('Foo1', "root::Foo1")
151
151
  assert_valid_logger('Foo2', "root::Foo1::Foo2")
152
- defined?(Foo3.logger).should be_false
152
+ defined?(Foo3.logger).should be_falsey
153
153
  end
154
154
 
155
155
  it "should register loggers for sub-subclasses of registered classes" do
156
- defined?(Foo1).should be_false
157
- defined?(Foo2).should be_false
158
- defined?(Foo3).should be_false
156
+ defined?(Foo1).should be_falsey
157
+ defined?(Foo2).should be_falsey
158
+ defined?(Foo3).should be_falsey
159
159
  Lumber.setup_logger_hierarchy("Foo1", "root::Foo1")
160
160
  new_class('Foo1')
161
161
  new_class('Foo2', 'Foo1')
@@ -166,9 +166,9 @@ describe Lumber do
166
166
  end
167
167
 
168
168
  it "should register loggers for sub-subclasses of registered classes even when middle class not a logger" do
169
- defined?(Foo1).should be_false
170
- defined?(Foo2).should be_false
171
- defined?(Foo3).should be_false
169
+ defined?(Foo1).should be_falsey
170
+ defined?(Foo2).should be_falsey
171
+ defined?(Foo3).should be_falsey
172
172
  new_class('Foo1')
173
173
  new_class('Foo2', 'Foo1')
174
174
  Lumber.setup_logger_hierarchy("Foo1", "root::Foo1")
@@ -181,26 +181,52 @@ describe Lumber do
181
181
  end
182
182
 
183
183
  context "formatted MDC context" do
184
-
184
+
185
185
  before(:each) do
186
186
  Log4r::MDC.get_context.keys.each {|k| Log4r::MDC.remove(k) }
187
187
  end
188
-
188
+
189
189
  it "is empty for no context" do
190
190
  Lumber.format_mdc.should == ""
191
191
  end
192
-
192
+
193
193
  it "has context vars" do
194
194
  Log4r::MDC.put("baz", "boo")
195
195
  Log4r::MDC.put("foo", "bar")
196
196
  Lumber.format_mdc.should == "baz=boo foo=bar"
197
197
  end
198
-
198
+
199
199
  it "escapes %" do
200
200
  Log4r::MDC.put("%foo", "%bar")
201
201
  Lumber.format_mdc.should == "%%foo=%%bar"
202
202
  end
203
-
203
+
204
+ end
205
+
206
+ context "using other Logging Concerns" do
207
+
208
+ before(:each) do
209
+ Log4r::MDC.get_context.keys.each {|k| Log4r::MDC.remove(k) }
210
+ end
211
+
212
+ # An example extension to LoggerSupport
213
+ module TestLoggingConcern
214
+ extend ActiveSupport::Concern
215
+ include Lumber::LoggerSupport
216
+
217
+ def custom_log_context
218
+ Log4r::MDC.put("baz", "boo")
219
+ end
220
+ end
221
+
222
+ it "should allow the logger concern to be changed" do
223
+ Lumber.logger_concern = TestLoggingConcern
224
+ Lumber.setup_logger_hierarchy("Foo1", "root::foo1")
225
+ new_class('Foo1')
226
+
227
+ assert_valid_logger('Foo1', "root::foo1")
228
+ Foo1.new.custom_log_context
229
+ Lumber.format_mdc.should == "baz=boo"
230
+ end
204
231
  end
205
-
206
232
  end
@@ -55,13 +55,19 @@ end
55
55
  def assert_valid_logger(class_name, logger_name)
56
56
  clazz = eval class_name
57
57
  clazz.should_not be_nil
58
- clazz.respond_to?(:logger).should be_true
58
+ clazz.respond_to?(:logger).should be_truthy
59
59
  lgr = clazz.logger
60
60
  lgr.should be_an_instance_of(Log4r::Logger)
61
61
  lgr.fullname.should == logger_name
62
62
  end
63
63
 
64
64
  RSpec.configure do |config|
65
+ config.mock_with :rspec do |c|
66
+ c.syntax = [:should, :expect]
67
+ end
68
+ config.expect_with :rspec do |c|
69
+ c.syntax = [:should, :expect]
70
+ end
65
71
  config.before(:each) do
66
72
  Object.constants.grep(/^(Foo|Bar)/).each do |c|
67
73
  Object.send(:remove_const, c)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Conway
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-13 00:00:00.000000000 Z
11
+ date: 2014-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: log4r
@@ -255,4 +255,3 @@ test_files:
255
255
  - spec/server_spec.rb
256
256
  - spec/spec.opts
257
257
  - spec/spec_helper.rb
258
- has_rdoc: