lumberjack 1.2.7 → 1.2.9

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.
@@ -63,7 +63,10 @@ module Lumberjack
63
63
  # * :max_size - If the log device is a file path, it will be a Device::SizeRollingLogFile if this is set.
64
64
  #
65
65
  # All other options are passed to the device constuctor.
66
- def initialize(device = STDOUT, options = {})
66
+ #
67
+ # @param [Lumberjack::Device, Object, Symbol, String] device The device to log to.
68
+ # @param [Hash] options The options for the logger.
69
+ def initialize(device = $stdout, options = {})
67
70
  options = options.dup
68
71
  self.level = options.delete(:level) || INFO
69
72
  self.progname = options.delete(:progname)
@@ -83,11 +86,16 @@ module Lumberjack
83
86
  end
84
87
 
85
88
  # Get the timestamp format on the device if it has one.
89
+ #
90
+ # @return [String, nil] The timestamp format or nil if the device doesn't support it.
86
91
  def datetime_format
87
92
  device.datetime_format if device.respond_to?(:datetime_format)
88
93
  end
89
94
 
90
95
  # Set the timestamp format on the device if it is supported.
96
+ #
97
+ # @param [String] format The timestamp format.
98
+ # @return [void]
91
99
  def datetime_format=(format)
92
100
  if device.respond_to?(:datetime_format=)
93
101
  device.datetime_format = format
@@ -96,6 +104,8 @@ module Lumberjack
96
104
 
97
105
  # Get the level of severity of entries that are logged. Entries with a lower
98
106
  # severity level will be ignored.
107
+ #
108
+ # @return [Integer] The severity level.
99
109
  def level
100
110
  thread_local_value(:lumberjack_logger_level) || @level
101
111
  end
@@ -104,22 +114,30 @@ module Lumberjack
104
114
 
105
115
  # Set the log level using either an integer level like Logger::INFO or a label like
106
116
  # :info or "info"
117
+ #
118
+ # @param [Integer, Symbol, String] value The severity level.
119
+ # @return [void]
107
120
  def level=(value)
108
- if value.is_a?(Integer)
109
- @level = value
121
+ @level = if value.is_a?(Integer)
122
+ value
110
123
  else
111
- @level = Severity::label_to_level(value)
124
+ Severity.label_to_level(value)
112
125
  end
113
126
  end
114
127
 
115
128
  alias_method :sev_threshold=, :level=
116
129
 
117
130
  # Set the Lumberjack::Formatter used to format objects for logging as messages.
131
+ #
132
+ # @param [Lumberjack::Formatter, Object] value The formatter to use.
133
+ # @return [void]
118
134
  def formatter=(value)
119
135
  @_formatter = (value.is_a?(TaggedLoggerSupport::Formatter) ? value.__formatter : value)
120
136
  end
121
137
 
122
138
  # Get the Lumberjack::Formatter used to format objects for logging as messages.
139
+ #
140
+ # @return [Lumberjack::Formatter] The formatter.
123
141
  def formatter
124
142
  if respond_to?(:tagged)
125
143
  # Wrap in an object that supports ActiveSupport::TaggedLogger API
@@ -136,8 +154,10 @@ module Lumberjack
136
154
  # The tags added with this method are just strings so they are stored in the logger tags
137
155
  # in an array under the "tagged" tag. So calling `logger.tagged("foo", "bar")` will result
138
156
  # in tags `{"tagged" => ["foo", "bar"]}`.
157
+ #
158
+ # @return [Lumberjack::Logger] self.
139
159
  def tagged_logger!
140
- self.extend(TaggedLoggerSupport)
160
+ extend(TaggedLoggerSupport)
141
161
  self
142
162
  end
143
163
 
@@ -149,7 +169,13 @@ module Lumberjack
149
169
  # The severity can be passed in either as one of the Severity constants,
150
170
  # or as a Severity label.
151
171
  #
152
- # === Example
172
+ # @param [Integer, Symbol, String] severity The severity of the message.
173
+ # @param [Object] message The message to log.
174
+ # @param [String] progname The name of the program that is logging the message.
175
+ # @param [Hash] tags The tags to add to the log entry.
176
+ # @return [void]
177
+ #
178
+ # @example
153
179
  #
154
180
  # logger.add_entry(Logger::ERROR, exception)
155
181
  # logger.add_entry(Logger::INFO, "Request completed")
@@ -173,10 +199,10 @@ module Lumberjack
173
199
  if current_tags.empty?
174
200
  tags = Tags.stringify_keys(tags) unless tags.nil?
175
201
  else
176
- if tags.nil?
177
- tags = current_tags.dup
202
+ tags = if tags.nil?
203
+ current_tags.dup
178
204
  else
179
- tags = current_tags.merge(Tags.stringify_keys(tags))
205
+ current_tags.merge(Tags.stringify_keys(tags))
180
206
  end
181
207
  end
182
208
  tags = Tags.expand_runtime_values(tags)
@@ -191,6 +217,11 @@ module Lumberjack
191
217
  end
192
218
 
193
219
  # ::Logger compatible method to add a log entry.
220
+ #
221
+ # @param [Integer, Symbol, String] severity The severity of the message.
222
+ # @param [Object] message The message to log.
223
+ # @param [String] progname The name of the program that is logging the message.
224
+ # @return [void]
194
225
  def add(severity, message = nil, progname = nil, &block)
195
226
  if message.nil?
196
227
  if block
@@ -206,6 +237,8 @@ module Lumberjack
206
237
  alias_method :log, :add
207
238
 
208
239
  # Flush the logging device. Messages are not guaranteed to be written until this method is called.
240
+ #
241
+ # @return [void]
209
242
  def flush
210
243
  device.flush
211
244
  @last_flushed_at = Time.now
@@ -213,102 +246,170 @@ module Lumberjack
213
246
  end
214
247
 
215
248
  # Close the logging device.
249
+ #
250
+ # @return [void]
216
251
  def close
217
252
  flush
218
253
  device.close if device.respond_to?(:close)
219
254
  @closed = true
220
255
  end
221
256
 
257
+ # Returns +true+ if the logging device is closed.
258
+ #
259
+ # @return [Boolean] +true+ if the logging device is closed.
222
260
  def closed?
223
261
  @closed
224
262
  end
225
263
 
264
+ # Reopen the logging device.
265
+ #
266
+ # @param [Object] logdev passed through to the logging device.
226
267
  def reopen(logdev = nil)
227
268
  @closed = false
228
269
  device.reopen(logdev) if device.respond_to?(:reopen)
229
270
  end
230
271
 
231
272
  # Log a +FATAL+ message. The message can be passed in either the +message+ argument or in a block.
273
+ #
274
+ # @param [Object] message_or_progname_or_tags The message to log or progname
275
+ # if the message is passed in a block.
276
+ # @param [String, Hash] progname_or_tags The name of the program that is logging the message or tags
277
+ # if the message is passed in a block.
278
+ # @return [void]
232
279
  def fatal(message_or_progname_or_tags = nil, progname_or_tags = nil, &block)
233
280
  call_add_entry(FATAL, message_or_progname_or_tags, progname_or_tags, &block)
234
281
  end
235
282
 
236
283
  # Return +true+ if +FATAL+ messages are being logged.
284
+ #
285
+ # @return [Boolean]
237
286
  def fatal?
238
287
  level <= FATAL
239
288
  end
240
289
 
241
290
  # Set the log level to fatal.
291
+ #
292
+ # @return [void]
242
293
  def fatal!
243
294
  self.level = FATAL
244
295
  end
245
296
 
246
297
  # Log an +ERROR+ message. The message can be passed in either the +message+ argument or in a block.
298
+ #
299
+ # @param [Object] message_or_progname_or_tags The message to log or progname
300
+ # if the message is passed in a block.
301
+ # @param [String, Hash] progname_or_tags The name of the program that is logging the message or tags
302
+ # if the message is passed in a block.
303
+ # @return [void]
247
304
  def error(message_or_progname_or_tags = nil, progname_or_tags = nil, &block)
248
305
  call_add_entry(ERROR, message_or_progname_or_tags, progname_or_tags, &block)
249
306
  end
250
307
 
251
308
  # Return +true+ if +ERROR+ messages are being logged.
309
+ #
310
+ # @return [Boolean]
252
311
  def error?
253
312
  level <= ERROR
254
313
  end
255
314
 
256
315
  # Set the log level to error.
316
+ #
317
+ # @return [void]
257
318
  def error!
258
319
  self.level = ERROR
259
320
  end
260
321
 
261
322
  # Log a +WARN+ message. The message can be passed in either the +message+ argument or in a block.
323
+ #
324
+ # @param [Object] message_or_progname_or_tags The message to log or progname
325
+ # if the message is passed in a block.
326
+ # @param [String, Hash] progname_or_tags The name of the program that is logging the message or tags
327
+ # if the message is passed in a block.
328
+ # @return [void]
262
329
  def warn(message_or_progname_or_tags = nil, progname_or_tags = nil, &block)
263
330
  call_add_entry(WARN, message_or_progname_or_tags, progname_or_tags, &block)
264
331
  end
265
332
 
266
333
  # Return +true+ if +WARN+ messages are being logged.
334
+ #
335
+ # @return [Boolean]
267
336
  def warn?
268
337
  level <= WARN
269
338
  end
270
339
 
271
340
  # Set the log level to warn.
341
+ #
342
+ # @return [void]
272
343
  def warn!
273
344
  self.level = WARN
274
345
  end
275
346
 
276
347
  # Log an +INFO+ message. The message can be passed in either the +message+ argument or in a block.
348
+ #
349
+ # @param [Object] message_or_progname_or_tags The message to log or progname
350
+ # if the message is passed in a block.
351
+ # @param [String] progname_or_tags The name of the program that is logging the message or tags
352
+ # if the message is passed in a block.
353
+ # @return [void]
277
354
  def info(message_or_progname_or_tags = nil, progname_or_tags = nil, &block)
278
355
  call_add_entry(INFO, message_or_progname_or_tags, progname_or_tags, &block)
279
356
  end
280
357
 
281
358
  # Return +true+ if +INFO+ messages are being logged.
359
+ #
360
+
282
361
  def info?
283
362
  level <= INFO
284
363
  end
285
364
 
286
365
  # Set the log level to info.
366
+ #
367
+ # @return [void]
287
368
  def info!
288
369
  self.level = INFO
289
370
  end
290
371
 
291
372
  # Log a +DEBUG+ message. The message can be passed in either the +message+ argument or in a block.
373
+ #
374
+ # @param [Object] message_or_progname_or_tags The message to log or progname
375
+ # if the message is passed in a block.
376
+ # @param [String, Hash] progname_or_tags The name of the program that is logging the message or tags
377
+ # if the message is passed in a block.
378
+ # @return [void]
292
379
  def debug(message_or_progname_or_tags = nil, progname_or_tags = nil, &block)
293
380
  call_add_entry(DEBUG, message_or_progname_or_tags, progname_or_tags, &block)
294
381
  end
295
382
 
296
383
  # Return +true+ if +DEBUG+ messages are being logged.
384
+ #
385
+ # @return [Boolean]
297
386
  def debug?
298
387
  level <= DEBUG
299
388
  end
300
389
 
301
390
  # Set the log level to debug.
391
+ #
392
+ # @return [void]
302
393
  def debug!
303
394
  self.level = DEBUG
304
395
  end
305
396
 
306
397
  # Log a message when the severity is not known. Unknown messages will always appear in the log.
307
398
  # The message can be passed in either the +message+ argument or in a block.
399
+ #
400
+ # @param [Object] message_or_progname_or_tags The message to log or progname
401
+ # if the message is passed in a block.
402
+ # @param [String, Hash] progname_or_tags The name of the program that is logging the message or tags
403
+ # if the message is passed in a block.
404
+ # @return [void]
308
405
  def unknown(message_or_progname_or_tags = nil, progname_or_tags = nil, &block)
309
406
  call_add_entry(UNKNOWN, message_or_progname_or_tags, progname_or_tags, &block)
310
407
  end
311
408
 
409
+ # Add a message when the severity is not known.
410
+ #
411
+ # @param [Object] msg The message to log.
412
+ # @return [void]
312
413
  def <<(msg)
313
414
  add_entry(UNKNOWN, msg)
314
415
  end
@@ -316,7 +417,10 @@ module Lumberjack
316
417
  # Silence the logger by setting a new log level inside a block. By default, only +ERROR+ or +FATAL+
317
418
  # messages will be logged.
318
419
  #
319
- # === Example
420
+ # @param [Integer, String, Symbol] temporary_level The log level to use inside the block.
421
+ # @return [Object] The result of the block.
422
+ #
423
+ # @example
320
424
  #
321
425
  # logger.level = Logger::INFO
322
426
  # logger.silence do
@@ -325,7 +429,7 @@ module Lumberjack
325
429
  def silence(temporary_level = ERROR, &block)
326
430
  if silencer
327
431
  unless temporary_level.is_a?(Integer)
328
- temporary_level = Severity::label_to_level(temporary_level)
432
+ temporary_level = Severity.label_to_level(temporary_level)
329
433
  end
330
434
  push_thread_local_value(:lumberjack_logger_level, temporary_level, &block)
331
435
  else
@@ -335,6 +439,9 @@ module Lumberjack
335
439
 
336
440
  # Set the program name that is associated with log messages. If a block
337
441
  # is given, the program name will be valid only within the block.
442
+ #
443
+ # @param [String] value The program name to use.
444
+ # @return [void]
338
445
  def set_progname(value, &block)
339
446
  if block
340
447
  push_thread_local_value(:lumberjack_logger_progname, value, &block)
@@ -344,6 +451,8 @@ module Lumberjack
344
451
  end
345
452
 
346
453
  # Get the program name associated with log messages.
454
+ #
455
+ # @return [String]
347
456
  def progname
348
457
  thread_local_value(:lumberjack_logger_progname) || @progname
349
458
  end
@@ -353,6 +462,9 @@ module Lumberjack
353
462
  # the tags will only be defined on the tags in that block. When the parent block
354
463
  # exits, all the tags will be reverted. If there is no block, then the tags will
355
464
  # be defined as global and apply to all log statements.
465
+ #
466
+ # @param [Hash] tags The tags to set.
467
+ # @return [void]
356
468
  def tag(tags, &block)
357
469
  tags = Tags.stringify_keys(tags)
358
470
  thread_tags = thread_local_value(:lumberjack_logger_tags)
@@ -361,15 +473,19 @@ module Lumberjack
361
473
  push_thread_local_value(:lumberjack_logger_tags, merged_tags, &block)
362
474
  elsif thread_tags
363
475
  thread_tags.merge!(tags)
476
+ nil
364
477
  else
365
478
  @tags.merge!(tags)
479
+ nil
366
480
  end
367
- nil
368
481
  end
369
482
 
370
483
  # Remove a tag from the current tag context. If this is called inside a block to a
371
484
  # call to `tag`, the tags will only be removed for the duration of that block. Otherwise
372
485
  # they will be removed from the global tags.
486
+ #
487
+ # @param [Array<String, Symbol>] tag_names The tags to remove.
488
+ # @return [void]
373
489
  def remove_tag(*tag_names)
374
490
  thread_tags = thread_local_value(:lumberjack_logger_tags)
375
491
  if thread_tags
@@ -380,21 +496,43 @@ module Lumberjack
380
496
  end
381
497
 
382
498
  # Return all tags in scope on the logger including global tags set on the Lumberjack
383
- # context, tags set on the logger, and tags set on the current block for the logger
499
+ # context, tags set on the logger, and tags set on the current block for the logger.
500
+ #
501
+ # @return [Hash]
384
502
  def tags
385
503
  tags = {}
386
504
  context_tags = Lumberjack.context_tags
387
505
  tags.merge!(context_tags) if context_tags && !context_tags.empty?
388
- tags.merge!(@tags) if !@tags.empty?
506
+ tags.merge!(@tags) if !@tags.empty? && !thread_local_value(:lumberjack_logger_untagged)
389
507
  scope_tags = thread_local_value(:lumberjack_logger_tags)
390
508
  tags.merge!(scope_tags) if scope_tags && !scope_tags.empty?
391
509
  tags
392
510
  end
393
511
 
512
+ # Remove all tags on the current logger and logging context within a block.
513
+ # You can still set new block scoped tags within theuntagged block and provide
514
+ # tags on individual log methods.
515
+ #
516
+ # @return [void]
517
+ def untagged(&block)
518
+ Lumberjack.use_context(nil) do
519
+ scope_tags = thread_local_value(:lumberjack_logger_tags)
520
+ untagged = thread_local_value(:lumberjack_logger_untagged)
521
+ begin
522
+ set_thread_local_value(:lumberjack_logger_untagged, true)
523
+ set_thread_local_value(:lumberjack_logger_tags, nil)
524
+ tag({}, &block)
525
+ ensure
526
+ set_thread_local_value(:lumberjack_logger_untagged, untagged)
527
+ set_thread_local_value(:lumberjack_logger_tags, scope_tags)
528
+ end
529
+ end
530
+ end
531
+
394
532
  private
395
533
 
396
534
  # Dereference arguments to log calls so we can have methods with compatibility with ::Logger
397
- def call_add_entry(severity, message_or_progname_or_tags, progname_or_tags, &block) #:nodoc:
535
+ def call_add_entry(severity, message_or_progname_or_tags, progname_or_tags, &block) # :nodoc:
398
536
  message = nil
399
537
  progname = nil
400
538
  tags = nil
@@ -419,7 +557,7 @@ module Lumberjack
419
557
  end
420
558
 
421
559
  # Set a local value for a thread tied to this object.
422
- def set_thread_local_value(name, value) #:nodoc:
560
+ def set_thread_local_value(name, value) # :nodoc:
423
561
  values = Thread.current[name]
424
562
  unless values
425
563
  values = {}
@@ -434,13 +572,13 @@ module Lumberjack
434
572
  end
435
573
 
436
574
  # Get a local value for a thread tied to this object.
437
- def thread_local_value(name) #:nodoc:
575
+ def thread_local_value(name) # :nodoc:
438
576
  values = Thread.current[name]
439
577
  values[self] if values
440
578
  end
441
579
 
442
580
  # Set a local value for a thread tied to this object within a block.
443
- def push_thread_local_value(name, value) #:nodoc:
581
+ def push_thread_local_value(name, value) # :nodoc:
444
582
  save_val = thread_local_value(name)
445
583
  set_thread_local_value(name, value)
446
584
  begin
@@ -451,7 +589,7 @@ module Lumberjack
451
589
  end
452
590
 
453
591
  # Open a logging device.
454
- def open_device(device, options) #:nodoc:
592
+ def open_device(device, options) # :nodoc:
455
593
  if device.nil?
456
594
  nil
457
595
  elsif device.is_a?(Device)
@@ -472,27 +610,27 @@ module Lumberjack
472
610
  end
473
611
  end
474
612
 
475
- def write_to_device(entry) #:nodoc:
476
- begin
477
- device.write(entry)
478
- rescue => e
479
- $stderr.puts("#{e.class.name}: #{e.message}#{' at ' + e.backtrace.first if e.backtrace}")
480
- $stderr.puts(entry.to_s)
481
- end
613
+ def write_to_device(entry) # :nodoc:
614
+ device.write(entry)
615
+ rescue => e
616
+ # rubocop:disable Style/StderrPuts
617
+ $stderr.puts("#{e.class.name}: #{e.message}#{" at " + e.backtrace.first if e.backtrace}")
618
+ $stderr.puts(entry.to_s)
619
+ # rubocop:enable Style/StderrPuts
482
620
  end
483
621
 
484
622
  # Create a thread that will periodically call flush.
485
- def create_flusher_thread(flush_seconds) #:nodoc:
623
+ def create_flusher_thread(flush_seconds) # :nodoc:
486
624
  if flush_seconds > 0
487
625
  begin
488
626
  logger = self
489
627
  Thread.new do
490
- while !closed?
628
+ until closed?
491
629
  begin
492
630
  sleep(flush_seconds)
493
631
  logger.flush if Time.now - logger.last_flushed_at >= flush_seconds
494
632
  rescue => e
495
- $stderr.puts("Error flushing log: #{e.inspect}")
633
+ warn("Error flushing log: #{e.inspect}")
496
634
  end
497
635
  end
498
636
  end
@@ -16,7 +16,7 @@ module Lumberjack
16
16
  def call(env)
17
17
  request_id = env[REQUEST_ID]
18
18
  if request_id && @abbreviated
19
- request_id = request_id.split('-', 2).first
19
+ request_id = request_id.split("-", 2).first
20
20
  end
21
21
  Lumberjack.unit_of_work(request_id) do
22
22
  @app.call(env)
@@ -6,7 +6,7 @@ module Lumberjack
6
6
  def initialize(app)
7
7
  @app = app
8
8
  end
9
-
9
+
10
10
  def call(env)
11
11
  Lumberjack.unit_of_work do
12
12
  @app.call(env)
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Lumberjack
4
4
  module Rack
5
- require_relative "rack/unit_of_work.rb"
6
- require_relative "rack/request_id.rb"
7
- require_relative "rack/context.rb"
5
+ require_relative "rack/unit_of_work"
6
+ require_relative "rack/request_id"
7
+ require_relative "rack/context"
8
8
  end
9
9
  end
@@ -11,17 +11,24 @@ module Lumberjack
11
11
  FATAL = ::Logger::Severity::FATAL
12
12
  UNKNOWN = ::Logger::Severity::UNKNOWN
13
13
 
14
- SEVERITY_LABELS = %w(DEBUG INFO WARN ERROR FATAL UNKNOWN).freeze
14
+ SEVERITY_LABELS = %w[DEBUG INFO WARN ERROR FATAL UNKNOWN].freeze
15
15
 
16
16
  class << self
17
+ # Convert a severity level to a label.
18
+ #
19
+ # @param [Integer] severity The severity level to convert.
20
+ # @return [String] The severity label.
17
21
  def level_to_label(severity)
18
22
  SEVERITY_LABELS[severity] || SEVERITY_LABELS.last
19
23
  end
20
24
 
25
+ # Convert a severity label to a level.
26
+ #
27
+ # @param [String, Symbol] label The severity label to convert.
28
+ # @return [Integer] The severity level.
21
29
  def label_to_level(label)
22
30
  SEVERITY_LABELS.index(label.to_s.upcase) || UNKNOWN
23
31
  end
24
32
  end
25
-
26
33
  end
27
34
  end
@@ -9,7 +9,6 @@ module Lumberjack
9
9
  # tag_formatter.add(["password", "email"]) { |value| "***" }
10
10
  # tag_formatter.add("finished_at", Lumberjack::Formatter::DateTimeFormatter.new("%Y-%m-%dT%H:%m:%S%z"))
11
11
  class TagFormatter
12
-
13
12
  def initialize
14
13
  @formatters = {}
15
14
  @default_formatter = nil
@@ -17,6 +16,10 @@ module Lumberjack
17
16
 
18
17
  # Add a default formatter applied to all tag values. This can either be a Lumberjack::Formatter
19
18
  # or an object that responds to `call` or a block.
19
+ #
20
+ # @param [Lumberjack::Formatter, #call, nil] formatter The formatter to use.
21
+ # If this is nil, then the block will be used as the formatter.
22
+ # @return [Lumberjack::TagFormatter] self
20
23
  def default(formatter = nil, &block)
21
24
  formatter ||= block
22
25
  formatter = dereference_formatter(formatter)
@@ -25,6 +28,8 @@ module Lumberjack
25
28
  end
26
29
 
27
30
  # Remove the default formatter.
31
+ #
32
+ # @return [Lumberjack::TagFormatter] self
28
33
  def remove_default
29
34
  @default_formatter = nil
30
35
  self
@@ -33,6 +38,11 @@ module Lumberjack
33
38
  # Add a formatter for specific tag names. This can either be a Lumberjack::Formatter
34
39
  # or an object that responds to `call` or a block. The default formatter will not be
35
40
  # applied.
41
+ #
42
+ # @param [String, Array<String>] names The tag names to apply the formatter to.
43
+ # @param [Lumberjack::Formatter, #call, nil] formatter The formatter to use.
44
+ # If this is nil, then the block will be used as the formatter.
45
+ # @return [Lumberjack::TagFormatter] self
36
46
  def add(names, formatter = nil, &block)
37
47
  formatter ||= block
38
48
  formatter = dereference_formatter(formatter)
@@ -47,6 +57,9 @@ module Lumberjack
47
57
  end
48
58
 
49
59
  # Remove formatters for specific tag names. The default formatter will still be applied.
60
+ #
61
+ # @param [String, Array<String>] names The tag names to remove the formatter from.
62
+ # @return [Lumberjack::TagFormatter] self
50
63
  def remove(names)
51
64
  Array(names).each do |name|
52
65
  @formatters.delete(name.to_s)
@@ -55,6 +68,8 @@ module Lumberjack
55
68
  end
56
69
 
57
70
  # Remove all formatters.
71
+ #
72
+ # @return [Lumberjack::TagFormatter] self
58
73
  def clear
59
74
  @default_formatter = nil
60
75
  @formatters.clear
@@ -62,6 +77,9 @@ module Lumberjack
62
77
  end
63
78
 
64
79
  # Format a hash of tags using the formatters
80
+ #
81
+ # @param [Hash] tags The tags to format.
82
+ # @return [Hash] The formatted tags.
65
83
  def format(tags)
66
84
  return nil if tags.nil?
67
85
  if @default_formatter.nil? && (@formatters.empty? || (@formatters.keys & tags.keys).empty?)
@@ -87,12 +105,11 @@ module Lumberjack
87
105
  if formatter.is_a?(TaggedLoggerSupport::Formatter)
88
106
  formatter.__formatter
89
107
  elsif formatter.is_a?(Symbol)
90
- formatter_class_name = "#{formatter.to_s.gsub(/(^|_)([a-z])/){|m| $~[2].upcase}}Formatter"
108
+ formatter_class_name = "#{formatter.to_s.gsub(/(^|_)([a-z])/) { |m| $~[2].upcase }}Formatter"
91
109
  Formatter.const_get(formatter_class_name).new
92
110
  else
93
111
  formatter
94
112
  end
95
113
  end
96
-
97
114
  end
98
115
  end
@@ -6,7 +6,6 @@ require "forwardable"
6
6
  module Lumberjack
7
7
  # Methods to make Lumberjack::Logger API compatible with ActiveSupport::TaggedLogger.
8
8
  module TaggedLoggerSupport
9
-
10
9
  class Formatter < DelegateClass(Lumberjack::Formatter)
11
10
  extend Forwardable
12
11
  def_delegators :@logger, :tagged, :push_tags, :pop_tags, :clear_tags!
@@ -56,7 +55,7 @@ module Lumberjack
56
55
 
57
56
  def pop_tags(size = 1)
58
57
  tagged_values = Array(@tags["tagged"])
59
- tagged_values = (tagged_values.size > size ? tagged_values[0, tagged_values.size - size] : nil)
58
+ tagged_values = ((tagged_values.size > size) ? tagged_values[0, tagged_values.size - size] : nil)
60
59
  tag("tagged" => tagged_values)
61
60
  end
62
61
 
@@ -10,7 +10,7 @@ module Lumberjack
10
10
  base.singleton_class.send(:prepend, ClassMethods)
11
11
  end
12
12
  end
13
-
13
+
14
14
  module ClassMethods
15
15
  def new(logger)
16
16
  if logger.is_a?(Lumberjack::Logger)
@@ -5,6 +5,9 @@ module Lumberjack
5
5
  class << self
6
6
  # Transform hash keys to strings. This method exists for optimization and backward compatibility.
7
7
  # If a hash already has string keys, it will be returned as is.
8
+ #
9
+ # @param [Hash] hash The hash to transform.
10
+ # @return [Hash] The hash with string keys.
8
11
  def stringify_keys(hash)
9
12
  return nil if hash.nil?
10
13
  if hash.keys.all? { |key| key.is_a?(String) }
@@ -22,12 +25,15 @@ module Lumberjack
22
25
 
23
26
  # Ensure keys are strings and expand any values in a hash that are Proc's by calling them and replacing
24
27
  # the value with the result. This allows setting global tags with runtime values.
28
+ #
29
+ # @param [Hash] hash The hash to transform.
30
+ # @return [Hash] The hash with string keys and expanded values.
25
31
  def expand_runtime_values(hash)
26
32
  return nil if hash.nil?
27
33
  if hash.all? { |key, value| key.is_a?(String) && !value.is_a?(Proc) }
28
34
  return hash
29
35
  end
30
-
36
+
31
37
  copy = {}
32
38
  hash.each do |key, value|
33
39
  if value.is_a?(Proc) && (value.arity == 0 || value.arity == -1)