madvertise-logging 0.9.4 → 1.0.0.rc1

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.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm use --create ruby-1.9.3-p286@madvertise-logging
1
+ rvm use --create ruby-1.9.3-p392@madvertise-logging
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
@@ -178,10 +178,16 @@ module Madvertise
178
178
 
179
179
  def add(severity, message, attribs = {})
180
180
  severity = severity.is_a?(Symbol) ? self.class.severities[severity] : severity
181
- message = "#{called_from}: #{message}" if @log_caller
182
- message = "[#{@token}] #{message}" if @token
183
- message = "#{message} #{attribs.map{|k,v| "#{k}=#{v.to_s.clean_quote}"}.join(' ')}" if attribs.any?
181
+
182
+ attribs.merge!(called_from) if @log_caller
183
+ attribs.merge!(token: @token) if @token
184
+ attribs = attribs.map do |k,v|
185
+ "#{k}=#{v.to_s.clean_quote}"
186
+ end.join(' ')
187
+
188
+ message = "#{message} #{attribs}" if attribs.length > 0
184
189
  logger.add(severity) { message }
190
+
185
191
  return nil
186
192
  end
187
193
 
@@ -233,8 +239,8 @@ module Madvertise
233
239
  line.match(/(improved_logger|multi_logger)\.rb/).nil?
234
240
  end
235
241
 
236
- file, num, _ = location.split(':')
237
- [ File.basename(file), num ].join(':')
242
+ file, line, _ = location.split(':')
243
+ { :file => file, :line => line }
238
244
  end
239
245
 
240
246
  def create_backend
@@ -1,6 +1,6 @@
1
1
  module Madvertise
2
2
  module Logging
3
3
  # @private
4
- VERSION = "0.9.4"
4
+ VERSION = "1.0.0.rc1"
5
5
  end
6
6
  end
@@ -1,106 +1,71 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
- require 'tempfile'
4
-
5
- include Madvertise::Logging
6
-
7
- RSpec::Matchers.define :have_received_message do |expected|
8
- match do |actual|
9
- @last = IO.readlines(actual).last rescue nil
10
- @last ? @last.match(Regexp.new(expected)) : false
11
- end
12
-
13
- failure_message_for_should do |actual|
14
- "expected #{@last.inspect} to contain #{expected}"
15
- end
16
-
17
- failure_message_for_should_not do |actual|
18
- "expected #{@last.inspect} to not contain #{expected}"
19
- end
20
- end
21
-
22
3
  describe ImprovedLogger do
23
4
 
24
- before(:all) do
25
- Tempfile.new("spec").tap do |tmpfile|
26
- @logfile = tmpfile.path
27
- tmpfile.close
28
- end
29
- end
30
-
31
- after(:all) do
32
- File.unlink(@logfile) rescue nil
33
- end
34
-
35
- before(:each) do
36
- File.unlink(@logfile) rescue nil
37
- @logger = ImprovedLogger.new(@logfile)
38
- @logger.level = :debug
39
- end
5
+ let(:logger) { ImprovedLogger.new(:document) }
40
6
 
41
- subject { @logger }
7
+ before(:each) { logger.level = :debug }
42
8
 
43
- it { should be_a IO }
44
- its(:logger) { should_not be_nil }
9
+ subject { logger.messages }
45
10
 
46
11
  ImprovedLogger.severities.keys.each do |level|
47
12
  describe level do
48
- subject { @logfile }
49
- before { @logger.send(level, "test") }
13
+ before { logger.send(level, "testing #{level}") }
50
14
  let(:prefix) { level == :unknown ? "ANY" : level.to_s.upcase }
51
- it { should have_received_message(/\[#{prefix}\].*test/) }
15
+ it "logs #{level} messages" do
16
+ subject.last[:message].should == "testing #{level}"
17
+ end
52
18
  end
53
19
  end
54
20
 
55
- it "should log info level messages with write and << compat methods" do
56
- @logger << "Info test1"
57
- @logfile.should have_received_message(/\[INFO\].*Info test1/)
58
- @logger.write("Info test2")
59
- @logfile.should have_received_message(/\[INFO\].*Info test2/)
21
+ it "logs info level messages with <<" do
22
+ logger << "Info test <<"
23
+ subject.last[:message].should == "Info test <<"
60
24
  end
61
25
 
62
- it "should support additional attributes" do
63
- @logger.info("foo", key: "value", test: "with space")
64
- @logfile.should have_received_message(/key=value test="with space"/)
26
+ it "logs info level messages with write" do
27
+ logger.write("Info test write")
28
+ subject.last[:message].should == "Info test write"
65
29
  end
66
30
 
67
- it "should support lazy-evaluation via blocks" do
68
- @logger.debug { "debug message" }
69
- @logfile.should have_received_message(/debug message/)
70
- @logger.debug { ["debug message", {key: "value"}] }
71
- @logfile.should have_received_message(/debug message.*key=value/)
31
+ it "supports additional attributes" do
32
+ logger.info("foo", key: "value", test: "with space")
33
+ subject.last[:message].should == 'foo key=value test="with space"'
72
34
  end
73
35
 
74
- it "should accept a different backend" do
75
- l = Logger.new('/dev/null')
76
- @logger.logger = l
77
- @logger.logger.should == l
36
+ it "supports lazy-evaluation via blocks" do
37
+ logger.debug { "debug message" }
38
+ subject.last[:message].should == "debug message"
78
39
  end
79
40
 
80
- it "should support reopening log files" do
81
- @logger.close
82
- FileUtils.rm(@logfile)
83
- @logger.info('Reopen')
84
- @logfile.should have_received_message("Reopen")
41
+ it "supports lazy-evaluation with attributes" do
42
+ logger.debug { ["debug message", {key: "value"}] }
43
+ subject.last[:message].should == "debug message key=value"
44
+ end
45
+
46
+ it "accepts a different backend" do
47
+ l = Logger.new('/dev/null')
48
+ logger.logger = l
49
+ logger.logger.should == l
85
50
  end
86
51
 
87
52
  describe :log_caller do
88
- it "should log the caller file and line number" do
89
- f = File.basename(__FILE__)
53
+ it "logs the caller file and line number" do
54
+ f = __FILE__
90
55
  l = __LINE__ + 3
91
56
 
92
- @logger.log_caller = true
93
- @logger.info("Caller test")
94
- @logfile.should have_received_message("#{f}:#{l}:")
57
+ logger.log_caller = true
58
+ logger.info("Caller test")
59
+ subject.last[:message].should == "Caller test file=#{f} line=#{l}"
95
60
  end
96
61
 
97
- it "should not log the caller file and line number" do
62
+ it "does not log the caller file and line number" do
98
63
  f = File.basename(__FILE__)
99
64
  l = __LINE__ + 3
100
65
 
101
- @logger.log_caller = false
102
- @logger.info("Caller test")
103
- @logfile.should_not have_received_message("#{f}:#{l}:")
66
+ logger.log_caller = false
67
+ logger.info("Caller test")
68
+ subject.last[:message].should_not == "Caller test file=#{f} line=#{l}"
104
69
  end
105
70
  end
106
71
 
@@ -118,44 +83,39 @@ describe ImprovedLogger do
118
83
  end
119
84
  end
120
85
 
121
- subject { @logfile }
122
-
123
- context "with exception object" do
124
- before { @logger.exception(exc) }
125
- it { should have_received_message("exception class=RuntimeError reason=\"Test error\"") }
86
+ it "logs an exception object" do
87
+ logger.exception(exc)
88
+ subject.last[:message].should == "exception class=RuntimeError reason=\"Test error\" message= backtrace=\"['/home/jdoe/app/libexec/app.rb:1:in `foo'']\""
126
89
  end
127
90
 
128
- context "with exception object and prefix" do
129
- before { @logger.exception(exc, "app failed to foo") }
130
- it { should have_received_message("app failed to foo") }
91
+ it "logs an exception object and prefix" do
92
+ logger.exception(exc, "app failed to foo")
93
+ subject.last[:message].should == "exception class=RuntimeError reason=\"Test error\" message=\"app failed to foo\" backtrace=\"['/home/jdoe/app/libexec/app.rb:1:in `foo'']\""
131
94
  end
132
95
  end
133
96
 
134
97
  describe :clean_trace do
135
- subject { @logger.clean_trace(fake_trace) }
98
+ subject { logger.clean_trace(fake_trace) }
136
99
  it { should include("/home/jdoe/app/libexec/app.rb:1:in `foo'") }
137
100
  it { should_not include("/usr/lib/ruby/gems/1.8/gems/madvertise-logging-0.1.0/lib/madvertise/logging/improved_logger.rb:42: in `info'") }
138
101
  end
139
102
 
140
103
  it "should support silencing" do
141
- @logger.silence do |logger|
104
+ logger.silence do |logger|
142
105
  logger.info "This should never be logged"
143
106
  end
144
107
 
145
- @logfile.should_not have_received_message("This should never be logged")
146
-
147
- @logger.info "This should be logged"
148
- @logfile.should have_received_message("This should be logged")
108
+ subject.last.should be_nil
149
109
  end
150
110
 
151
111
  it "should not discard messages if silencer is disabled globally" do
152
112
  ImprovedLogger.silencer = false
153
113
 
154
- @logger.silence do |logger|
114
+ logger.silence do |logger|
155
115
  logger.info "This should actually be logged"
156
116
  end
157
117
 
158
- @logfile.should have_received_message("This should actually be logged")
118
+ subject.last[:message].should == "This should actually be logged"
159
119
 
160
120
  ImprovedLogger.silencer = true
161
121
  end
@@ -163,13 +123,13 @@ describe ImprovedLogger do
163
123
  it "should support a token" do
164
124
  token = "3d5e27f7-b97c-4adc-b1fd-adf1bd4314e0"
165
125
 
166
- @logger.token = token
167
- @logger.info "This should include a token"
168
- @logfile.should have_received_message(token)
126
+ logger.token = token
127
+ logger.info "This should include a token"
128
+ subject.last[:message].should match(token)
169
129
 
170
- @logger.token = nil
171
- @logger.info "This should not include a token"
172
- @logfile.should_not have_received_message(token)
130
+ logger.token = nil
131
+ logger.info "This should not include a token"
132
+ subject.last[:message].should_not match(token)
173
133
  end
174
134
 
175
135
  it "should support save/restore on tokens" do
@@ -178,34 +138,34 @@ describe ImprovedLogger do
178
138
 
179
139
  obj = Object.new
180
140
 
181
- @logger.token = token1
182
- @logger.info "This should include token1"
183
- @logfile.should have_received_message(token1)
141
+ logger.token = token1
142
+ logger.info "This should include token1"
143
+ subject.last[:message].should match(token1)
184
144
 
185
- @logger.save_token(obj)
186
- @logger.token = token2
187
- @logger.info "This should include token2"
188
- @logfile.should have_received_message(token2)
145
+ logger.save_token(obj)
146
+ logger.token = token2
147
+ logger.info "This should include token2"
148
+ subject.last[:message].should match(token2)
189
149
 
190
- @logger.restore_token(obj)
191
- @logger.info "This should include token1"
192
- @logfile.should have_received_message(token1)
150
+ logger.restore_token(obj)
151
+ logger.info "This should include token1"
152
+ subject.last[:message].should match(token1)
193
153
 
194
- @logger.token = nil
195
- @logger.info "This should not include a token"
196
- @logfile.should_not have_received_message(token1)
197
- @logfile.should_not have_received_message(token2)
154
+ logger.token = nil
155
+ logger.info "This should not include a token"
156
+ subject.last[:message].should_not match(token1)
157
+ subject.last[:message].should_not match(token2)
198
158
  end
199
159
 
200
160
  it "should fall back to stderr if logfile is not writable" do
201
161
  $stderr.should_receive(:write).with(/not writable.*STDERR/)
202
162
 
203
163
  @logfile = "/not/writable/spec.log"
204
- @logger = ImprovedLogger.new(@logfile)
205
- @logger.level = :debug
164
+ logger = ImprovedLogger.new(@logfile)
165
+ logger.level = :debug
206
166
 
207
167
  $stderr.should_receive(:write).with(/test/)
208
- @logger.info "test"
168
+ logger.info "test"
209
169
  end
210
170
 
211
171
  it "should fallback to standard logger if syslogger gem is missing" do
@@ -213,50 +173,33 @@ describe ImprovedLogger do
213
173
  $:.replace($: - syslogger_paths)
214
174
 
215
175
  $stderr.should_receive(:write).with(/reverting to STDERR/)
216
- @logger = ImprovedLogger.new(:syslog)
217
- @logger.logger.should be_instance_of(Logger)
176
+ logger = ImprovedLogger.new(:syslog)
177
+ logger.logger.should be_instance_of(Logger)
218
178
 
219
179
  $:.replace($: + syslogger_paths)
220
180
  end
221
181
 
222
182
  context "should behave like write-only IO and" do
223
- it "should close on close_write" do
224
- @logger.should_receive(:close)
225
- @logger.close_write
226
- end
183
+ subject { logger }
227
184
 
228
- its(:flush) { should == @logger }
229
- its(:set_encoding) { should == @logger }
185
+ it { should be_a IO }
186
+ its(:logger) { should_not be_nil }
187
+ its(:flush) { should == logger }
188
+ its(:set_encoding) { should == logger }
230
189
  its(:sync) { should == true }
231
190
  its(:tty?) { should == false }
232
191
 
233
- it "should support printf" do
234
- @logger.printf("%.2f %s", 1.12345, "foo")
235
- @logfile.should have_received_message("1.12 foo")
236
- end
237
-
238
- it "should support print" do
239
- $,, old = ' ', $,
240
- @logger.print("foo", "bar", 123, ["baz", 345])
241
- @logfile.should have_received_message("foo bar 123 baz 345")
242
- $, = old
243
- end
244
-
245
- it "should support puts" do
246
- @logger.puts("a", "b")
247
- @logfile.should have_received_message("b")
248
- @logger.puts(["c", "d"])
249
- @logfile.should have_received_message("d")
250
- @logger.puts(1, 2, 3)
251
- @logfile.should have_received_message("3")
192
+ it "should close on close_write" do
193
+ logger.should_receive(:close)
194
+ logger.close_write
252
195
  end
253
196
 
254
197
  it "should not implement closed?" do
255
- expect { @logger.closed? }.to raise_error(NotImplementedError)
198
+ expect { logger.closed? }.to raise_error(NotImplementedError)
256
199
  end
257
200
 
258
201
  it "should not implement sync=" do
259
- expect { @logger.sync = false }.to raise_error(NotImplementedError)
202
+ expect { logger.sync = false }.to raise_error(NotImplementedError)
260
203
  end
261
204
 
262
205
  it "should implement readbyte, readchar, readline" do
@@ -265,8 +208,8 @@ describe ImprovedLogger do
265
208
  :readchar => :getc,
266
209
  :readline => :gets,
267
210
  }.each do |m, should|
268
- @logger.should_receive(should)
269
- expect { @logger.send(m) }.to raise_error(IOError)
211
+ logger.should_receive(should)
212
+ expect { logger.send(m) }.to raise_error(IOError)
270
213
  end
271
214
  end
272
215
 
@@ -290,23 +233,50 @@ describe ImprovedLogger do
290
233
  :ungetc
291
234
  ].each do |m|
292
235
  it "should raise IOError for method #{m}" do
293
- expect { @logger.send(m) }.to raise_error(IOError)
236
+ expect { logger.send(m) }.to raise_error(IOError)
237
+ end
238
+ end
239
+
240
+ context "print functions" do
241
+ subject { logger.messages }
242
+
243
+ it "should support printf" do
244
+ logger.printf("%.2f %s", 1.12345, "foo")
245
+ subject.last[:message].should == "1.12 foo"
246
+ end
247
+
248
+ it "should support print" do
249
+ $,, old = ' ', $,
250
+ logger.print("foo", "bar", 123, ["baz", 345])
251
+ subject.last[:message].should == "foo bar 123 baz 345"
252
+ $, = old
253
+ end
254
+
255
+ it "should support puts" do
256
+ logger.puts("a", "b")
257
+ subject.last[:message].should == "b"
258
+ logger.puts(["c", "d"])
259
+ subject.last[:message].should == "d"
260
+ logger.puts(1, 2, 3)
261
+ subject.last[:message].should == "3"
294
262
  end
295
263
  end
296
264
  end
297
265
 
298
266
  context "buffer backend" do
299
- before { @logger = ImprovedLogger.new(:buffer) }
267
+ let(:logger) { ImprovedLogger.new(:buffer) }
268
+ subject { logger }
269
+
300
270
  its(:sync) { should == false }
301
271
 
302
272
  it "should support a buffered logger" do
303
- @logger.info "test"
304
- @logger.buffer.should match(/test/)
273
+ logger.info "test"
274
+ logger.buffer.should match(/test/)
305
275
  end
306
276
  end
307
277
 
308
278
  context "document backend" do
309
- before { @logger = ImprovedLogger.new(:document) }
279
+ let(:logger) { ImprovedLogger.new(:document) }
310
280
 
311
281
  before do
312
282
  @msg = "test"
@@ -323,21 +293,22 @@ describe ImprovedLogger do
323
293
  end
324
294
 
325
295
  it "should store all messages as documents" do
326
- @logger.info(@msg)
327
- @logger.messages.first.should == @expected
296
+ logger.info(@msg)
297
+ logger.messages.first.should == @expected
328
298
  end
329
299
 
330
300
  it "should add custom attributes" do
331
301
  attrs = {txid: 1234}
332
- @logger.logger.attrs = attrs
333
- @logger.info(@msg)
334
- @logger.messages.first.should == attrs.merge(@expected)
302
+ logger.logger.attrs = attrs
303
+ logger.info(@msg)
304
+ logger.messages.first.should == attrs.merge(@expected)
335
305
  end
336
306
 
337
307
  end
338
308
 
339
309
  context "syslog backend" do
340
- before { @logger = ImprovedLogger.new(:syslog) }
310
+ let(:logger) { ImprovedLogger.new(:syslog) }
311
+ subject { logger }
341
312
  its(:sync) { should == true }
342
313
  its(:logger) { should be_instance_of(Syslogger) }
343
314
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: madvertise-logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
5
- prerelease:
4
+ version: 1.0.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Benedikt Böhm
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-23 00:00:00.000000000 Z
12
+ date: 2013-03-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Advanced logging classes with buffer backend, transactions, multi logger,
15
15
  etc
@@ -58,19 +58,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
58
  version: '0'
59
59
  segments:
60
60
  - 0
61
- hash: 1370509839467996557
61
+ hash: 438765603245301445
62
62
  required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
- - - ! '>='
65
+ - - ! '>'
66
66
  - !ruby/object:Gem::Version
67
- version: '0'
68
- segments:
69
- - 0
70
- hash: 1370509839467996557
67
+ version: 1.3.1
71
68
  requirements: []
72
69
  rubyforge_project:
73
- rubygems_version: 1.8.24
70
+ rubygems_version: 1.8.25
74
71
  signing_key:
75
72
  specification_version: 3
76
73
  summary: Advanced logging classes with buffer backend, transactions, multi logger,