lib/logstash-logger/multi_logger.rb in logstash-logger-0.16.0 vs lib/logstash-logger/multi_logger.rb in logstash-logger-0.17.0
- old
+ new
@@ -1,8 +1,11 @@
# Adapted from https://github.com/ffmike/multilogger
module LogStashLogger
class MultiLogger < ::Logger
+ # Array of Loggers to be logged to. These can be anything that acts reasonably like a Logger.
+ attr_accessor :loggers
+
def level=(value)
super
@loggers.each do |logger|
logger.level = value
end
@@ -26,11 +29,42 @@
@loggers.each do |logger|
logger.formatter ||= formatter
end
end
- # Array of Loggers to be logged to. These can be anything that acts reasonably like a Logger.
- attr_accessor :loggers
+ def silence(temporary_level = ::Logger::ERROR, &block)
+ silenceable_loggers = @loggers.select do |logger|
+ logger.respond_to?(:silence)
+ end
+
+ silence_loggers(temporary_level, silenceable_loggers, &block)
+ end
+
+ def silence_loggers(temporary_level = ::Logger::ERROR, silenceable_loggers, &block)
+ return yield(self) if silenceable_loggers.empty?
+
+ silenceable_loggers.shift.silence(temporary_level) do
+ silence_loggers(temporary_level, silenceable_loggers, &block)
+ end
+ end
+ private :silence_loggers
+
+ def tagged(*tags, &block)
+ taggable_loggers = @loggers.select do |logger|
+ logger.respond_to?(:tagged)
+ end
+
+ tag_loggers(tags, taggable_loggers, &block)
+ end
+
+ def tag_loggers(tags, taggable_loggers, &block)
+ return yield(self) if taggable_loggers.empty?
+
+ taggable_loggers.shift.tagged(*tags) do
+ tag_loggers(tags, taggable_loggers, &block)
+ end
+ end
+ private :tag_loggers
# Any method not defined on standard Logger class, just send it on to anyone who will listen
def method_missing(name, *args, &block)
@loggers.each do |logger|
if logger.respond_to?(name)