lumberjack 1.0.0

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.
Files changed (60) hide show
  1. data/MIT_LICENSE +20 -0
  2. data/README.rdoc +86 -0
  3. data/Rakefile +56 -0
  4. data/VERSION +1 -0
  5. data/lib/lumberjack.rb +39 -0
  6. data/lib/lumberjack/device.rb +26 -0
  7. data/lib/lumberjack/device/date_rolling_log_file.rb +58 -0
  8. data/lib/lumberjack/device/log_file.rb +18 -0
  9. data/lib/lumberjack/device/null.rb +15 -0
  10. data/lib/lumberjack/device/rolling_log_file.rb +109 -0
  11. data/lib/lumberjack/device/size_rolling_log_file.rb +58 -0
  12. data/lib/lumberjack/device/writer.rb +119 -0
  13. data/lib/lumberjack/formatter.rb +76 -0
  14. data/lib/lumberjack/formatter/exception_formatter.rb +12 -0
  15. data/lib/lumberjack/formatter/inspect_formatter.rb +10 -0
  16. data/lib/lumberjack/formatter/pretty_print_formatter.rb +23 -0
  17. data/lib/lumberjack/formatter/string_formatter.rb +10 -0
  18. data/lib/lumberjack/log_entry.rb +36 -0
  19. data/lib/lumberjack/logger.rb +302 -0
  20. data/lib/lumberjack/rack.rb +5 -0
  21. data/lib/lumberjack/rack/unit_of_work.rb +15 -0
  22. data/lib/lumberjack/severity.rb +23 -0
  23. data/lib/lumberjack/template.rb +71 -0
  24. data/spec/device/date_rolling_log_file_spec.rb +66 -0
  25. data/spec/device/date_rolling_log_file_spec.rbc +2118 -0
  26. data/spec/device/log_file_spec.rb +26 -0
  27. data/spec/device/log_file_spec.rbc +727 -0
  28. data/spec/device/null_spec.rb +12 -0
  29. data/spec/device/null_spec.rbc +362 -0
  30. data/spec/device/rolling_log_file_spec.rb +117 -0
  31. data/spec/device/rolling_log_file_spec.rbc +2894 -0
  32. data/spec/device/size_rolling_log_file_spec.rb +54 -0
  33. data/spec/device/size_rolling_log_file_spec.rbc +1961 -0
  34. data/spec/device/stream_spec.rbc +3310 -0
  35. data/spec/device/writer_spec.rb +118 -0
  36. data/spec/entry_spec.rbc +2333 -0
  37. data/spec/formatter/exception_formatter_spec.rb +20 -0
  38. data/spec/formatter/exception_formatter_spec.rbc +620 -0
  39. data/spec/formatter/inspect_formatter_spec.rb +13 -0
  40. data/spec/formatter/inspect_formatter_spec.rbc +360 -0
  41. data/spec/formatter/pretty_print_formatter_spec.rb +14 -0
  42. data/spec/formatter/pretty_print_formatter_spec.rbc +380 -0
  43. data/spec/formatter/string_formatter_spec.rb +12 -0
  44. data/spec/formatter/string_formatter_spec.rbc +314 -0
  45. data/spec/formatter_spec.rb +45 -0
  46. data/spec/formatter_spec.rbc +1431 -0
  47. data/spec/log_entry_spec.rb +69 -0
  48. data/spec/logger_spec.rb +390 -0
  49. data/spec/logger_spec.rbc +10043 -0
  50. data/spec/lumberjack_spec.rb +22 -0
  51. data/spec/lumberjack_spec.rbc +523 -0
  52. data/spec/rack/unit_of_work_spec.rb +26 -0
  53. data/spec/rack/unit_of_work_spec.rbc +697 -0
  54. data/spec/severity_spec.rb +23 -0
  55. data/spec/spec_helper.rb +16 -0
  56. data/spec/spec_helper.rbc +391 -0
  57. data/spec/template_spec.rb +34 -0
  58. data/spec/template_spec.rbc +1563 -0
  59. data/spec/unique_identifier_spec.rbc +329 -0
  60. metadata +128 -0
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Lumberjack::Device::Null do
4
+
5
+ it "should not generate any output" do
6
+ device = Lumberjack::Device::Null.new
7
+ device.write(Lumberjack::LogEntry.new(Time.now, 1, "New log entry", nil, $$, nil))
8
+ device.flush
9
+ device.close
10
+ end
11
+
12
+ end
@@ -0,0 +1,362 @@
1
+ !RBIX
2
+ 0
3
+ x
4
+ M
5
+ 1
6
+ n
7
+ n
8
+ x
9
+ 10
10
+ __script__
11
+ i
12
+ 26
13
+ 5
14
+ 7
15
+ 0
16
+ 64
17
+ 47
18
+ 49
19
+ 1
20
+ 1
21
+ 15
22
+ 5
23
+ 45
24
+ 2
25
+ 3
26
+ 43
27
+ 4
28
+ 43
29
+ 5
30
+ 56
31
+ 6
32
+ 47
33
+ 50
34
+ 7
35
+ 1
36
+ 15
37
+ 2
38
+ 11
39
+ I
40
+ 3
41
+ I
42
+ 0
43
+ I
44
+ 0
45
+ I
46
+ 0
47
+ n
48
+ p
49
+ 8
50
+ s
51
+ 11
52
+ spec_helper
53
+ x
54
+ 7
55
+ require
56
+ x
57
+ 10
58
+ Lumberjack
59
+ n
60
+ x
61
+ 6
62
+ Device
63
+ x
64
+ 4
65
+ Null
66
+ M
67
+ 1
68
+ p
69
+ 2
70
+ x
71
+ 9
72
+ for_block
73
+ t
74
+ n
75
+ x
76
+ 9
77
+ __block__
78
+ i
79
+ 11
80
+ 5
81
+ 7
82
+ 0
83
+ 64
84
+ 56
85
+ 1
86
+ 47
87
+ 50
88
+ 2
89
+ 1
90
+ 11
91
+ I
92
+ 4
93
+ I
94
+ 0
95
+ I
96
+ 0
97
+ I
98
+ 0
99
+ I
100
+ -2
101
+ p
102
+ 3
103
+ s
104
+ 30
105
+ should not generate any output
106
+ M
107
+ 1
108
+ p
109
+ 2
110
+ x
111
+ 9
112
+ for_block
113
+ t
114
+ n
115
+ x
116
+ 9
117
+ __block__
118
+ i
119
+ 115
120
+ 45
121
+ 0
122
+ 1
123
+ 43
124
+ 2
125
+ 43
126
+ 3
127
+ 13
128
+ 71
129
+ 4
130
+ 47
131
+ 9
132
+ 25
133
+ 47
134
+ 49
135
+ 5
136
+ 0
137
+ 13
138
+ 47
139
+ 49
140
+ 6
141
+ 0
142
+ 15
143
+ 8
144
+ 28
145
+ 49
146
+ 4
147
+ 0
148
+ 19
149
+ 0
150
+ 15
151
+ 20
152
+ 0
153
+ 45
154
+ 0
155
+ 7
156
+ 43
157
+ 8
158
+ 13
159
+ 71
160
+ 4
161
+ 47
162
+ 9
163
+ 76
164
+ 47
165
+ 49
166
+ 5
167
+ 0
168
+ 13
169
+ 45
170
+ 9
171
+ 10
172
+ 49
173
+ 11
174
+ 0
175
+ 79
176
+ 7
177
+ 12
178
+ 64
179
+ 1
180
+ 99
181
+ 43
182
+ 13
183
+ 7
184
+ 14
185
+ 49
186
+ 15
187
+ 1
188
+ 1
189
+ 47
190
+ 49
191
+ 6
192
+ 6
193
+ 15
194
+ 8
195
+ 99
196
+ 45
197
+ 9
198
+ 16
199
+ 49
200
+ 11
201
+ 0
202
+ 79
203
+ 7
204
+ 12
205
+ 64
206
+ 1
207
+ 99
208
+ 43
209
+ 13
210
+ 7
211
+ 14
212
+ 49
213
+ 15
214
+ 1
215
+ 1
216
+ 49
217
+ 4
218
+ 6
219
+ 49
220
+ 17
221
+ 1
222
+ 15
223
+ 20
224
+ 0
225
+ 49
226
+ 18
227
+ 0
228
+ 15
229
+ 20
230
+ 0
231
+ 49
232
+ 19
233
+ 0
234
+ 11
235
+ I
236
+ b
237
+ I
238
+ 1
239
+ I
240
+ 0
241
+ I
242
+ 0
243
+ I
244
+ -2
245
+ p
246
+ 20
247
+ x
248
+ 10
249
+ Lumberjack
250
+ n
251
+ x
252
+ 6
253
+ Device
254
+ x
255
+ 4
256
+ Null
257
+ x
258
+ 3
259
+ new
260
+ x
261
+ 8
262
+ allocate
263
+ x
264
+ 10
265
+ initialize
266
+ n
267
+ x
268
+ 5
269
+ Entry
270
+ x
271
+ 4
272
+ Time
273
+ n
274
+ x
275
+ 3
276
+ now
277
+ s
278
+ 13
279
+ New log entry
280
+ x
281
+ 7
282
+ Globals
283
+ x
284
+ 2
285
+ $$
286
+ x
287
+ 2
288
+ []
289
+ n
290
+ x
291
+ 5
292
+ write
293
+ x
294
+ 5
295
+ flush
296
+ x
297
+ 5
298
+ close
299
+ p
300
+ 9
301
+ I
302
+ 0
303
+ I
304
+ 6
305
+ I
306
+ 1f
307
+ I
308
+ 7
309
+ I
310
+ 67
311
+ I
312
+ 8
313
+ I
314
+ 6d
315
+ I
316
+ 9
317
+ I
318
+ 73
319
+ x
320
+ 63
321
+ /Users/bdurand/dev/projects/lumberjack/spec/device/null_spec.rb
322
+ p
323
+ 1
324
+ x
325
+ 6
326
+ device
327
+ x
328
+ 2
329
+ it
330
+ p
331
+ 3
332
+ I
333
+ 0
334
+ I
335
+ 5
336
+ I
337
+ b
338
+ x
339
+ 63
340
+ /Users/bdurand/dev/projects/lumberjack/spec/device/null_spec.rb
341
+ p
342
+ 0
343
+ x
344
+ 8
345
+ describe
346
+ p
347
+ 5
348
+ I
349
+ 0
350
+ I
351
+ 1
352
+ I
353
+ 9
354
+ I
355
+ 3
356
+ I
357
+ 1a
358
+ x
359
+ 63
360
+ /Users/bdurand/dev/projects/lumberjack/spec/device/null_spec.rb
361
+ p
362
+ 0
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+
3
+ describe Lumberjack::Device::RollingLogFile do
4
+
5
+ before :all do
6
+ create_tmp_dir
7
+ end
8
+
9
+ after :all do
10
+ delete_tmp_dir
11
+ end
12
+
13
+ let(:entry){ Lumberjack::LogEntry.new(Time.now, 1, "New log entry", nil, $$, nil) }
14
+
15
+ it "should check for rolling the log file on flush" do
16
+ device = Lumberjack::Device::RollingLogFile.new(File.join(tmp_dir, "test.log"))
17
+ device.write(entry)
18
+ device.should_receive(:roll_file?).twice.and_return(false)
19
+ device.flush
20
+ device.close
21
+ end
22
+
23
+ it "should roll the file by archiving the existing file and opening a new stream and calling after_roll" do
24
+ log_file = File.join(tmp_dir, "test_2.log")
25
+ device = Lumberjack::Device::RollingLogFile.new(log_file, :template => ":message")
26
+ device.should_receive(:roll_file?).and_return(false, true)
27
+ device.should_receive(:after_roll)
28
+ device.stub!(:archive_file_suffix).and_return("rolled")
29
+ device.write(entry)
30
+ device.flush
31
+ device.write(Lumberjack::LogEntry.new(Time.now, 1, "Another log entry", nil, $$, nil))
32
+ device.close
33
+ File.read("#{log_file}.rolled").should == "New log entry#{Lumberjack::LINE_SEPARATOR}"
34
+ File.read(log_file).should == "Another log entry#{Lumberjack::LINE_SEPARATOR}"
35
+ end
36
+
37
+ it "should reopen the file if the stream inode doesn't match the file path inode" do
38
+ log_file = File.join(tmp_dir, "test_3.log")
39
+ device = Lumberjack::Device::RollingLogFile.new(log_file, :template => ":message")
40
+ device.stub!(:roll_file?).and_return(false)
41
+ device.write(entry)
42
+ device.flush
43
+ File.rename(log_file, "#{log_file}.rolled")
44
+ device.flush
45
+ device.write(Lumberjack::LogEntry.new(Time.now, 1, "Another log entry", nil, $$, nil))
46
+ device.close
47
+ File.read("#{log_file}.rolled").should == "New log entry#{Lumberjack::LINE_SEPARATOR}"
48
+ File.read(log_file).should == "Another log entry#{Lumberjack::LINE_SEPARATOR}"
49
+ end
50
+
51
+ it "should roll the file properly with multiple thread and processes using it" do
52
+ log_file = File.join(tmp_dir, "test_4.log")
53
+ process_count = 8
54
+ thread_count = 4
55
+ entry_count = 400
56
+ max_size = 128
57
+ severity = Lumberjack::Severity::INFO
58
+ message = "This is a test message that is written to the log file to indicate what the state of the application is."
59
+
60
+ process_count.times do
61
+ Process.fork do
62
+ device = Lumberjack::Device::SizeRollingLogFile.new(log_file, :max_size => max_size, :template => ":message")
63
+ threads = []
64
+ thread_count.times do
65
+ threads << Thread.new do
66
+ entry_count.times do |i|
67
+ device.write(Lumberjack::LogEntry.new(Time.now, severity, message, "test", $$, nil))
68
+ device.flush if i % 10 == 0
69
+ end
70
+ end
71
+ end
72
+ threads.each{|thread| thread.join}
73
+ device.close
74
+ end
75
+ end
76
+ Process.waitall
77
+
78
+ line_count = 0
79
+ file_count = 0
80
+ Dir.glob("#{log_file}*").each do |file|
81
+ file_count += 1
82
+ lines = File.read(file).split(Lumberjack::LINE_SEPARATOR)
83
+ line_count += lines.size
84
+ lines.each do |line|
85
+ line.should == message
86
+ end
87
+ unless file == log_file
88
+ File.size(file).should >= max_size
89
+ end
90
+ end
91
+
92
+ file_count.should > 3
93
+ line_count.should == process_count * thread_count * entry_count
94
+ end
95
+
96
+ it "should only keep a specified number of archived log files" do
97
+ log_file = File.join(tmp_dir, "test_5.log")
98
+ device = Lumberjack::Device::RollingLogFile.new(log_file, :template => ":message", :keep => 2)
99
+ device.should_receive(:roll_file?).and_return(false, true, true, true)
100
+ device.stub!(:archive_file_suffix).and_return("delete", "another", "keep")
101
+ t = Time.now
102
+ File.should_receive(:ctime).with(log_file).any_number_of_times.and_return(t)
103
+ File.should_receive(:ctime).with("#{log_file}.delete").any_number_of_times.and_return(t + 1)
104
+ File.should_receive(:ctime).with("#{log_file}.another").any_number_of_times.and_return(t + 2)
105
+ File.should_receive(:ctime).with("#{log_file}.keep").any_number_of_times.and_return(t + 3)
106
+ device.write(entry)
107
+ device.flush
108
+ device.write(entry)
109
+ device.flush
110
+ device.write(entry)
111
+ device.flush
112
+ device.write(entry)
113
+ device.close
114
+ Dir.glob("#{log_file}*").sort.should == [log_file, "#{log_file}.another", "#{log_file}.keep"]
115
+ end
116
+
117
+ end