module Mixlib::Log
Constants
- LEVELS
- LEVEL_NAMES
- VERSION
Public Instance Methods
# File lib/mixlib/log.rb, line 131 def <<(msg) loggers.each {|l| l << msg } end
# File lib/mixlib/log.rb, line 135 def add(severity, message = nil, progname = nil, &block) loggers.each {|l| l.add(severity, message = nil, progname = nil, &block) } end
Use #init when you want to set up the logger manually. Arguments to this method get passed directly to Logger.new, so check out the documentation for the standard Logger class to understand what to do here.
If this method is called with no arguments, it will log to STDOUT at the :warn level.
It also configures the Logger instance it creates to use the custom Mixlib::Log::Formatter class.
# File lib/mixlib/log.rb, line 78 def init(*opts) reset! @logger = logger_for(*opts) @logger.formatter = Mixlib::Log::Formatter.new() if @logger.respond_to?(:formatter=) @logger.level = Logger::WARN @logger end
# File lib/mixlib/log.rb, line 101 def level(new_level=nil) if new_level.nil? LEVEL_NAMES[logger.level] else self.level=(new_level) end end
Sets the level for the Logger object by symbol. Valid arguments are:
:debug :info :warn :error :fatal
Throws an ArgumentError if you feed it a bogus log level.
# File lib/mixlib/log.rb, line 95 def level=(new_level) level_int = LEVEL_NAMES.key?(new_level) ? new_level : LEVELS[new_level] raise ArgumentError, "Log level must be one of :debug, :info, :warn, :error, or :fatal" if level_int.nil? loggers.each {|l| l.level = level_int } end
init always returns a configured logger and creates a new one if it doesn't yet exist
# File lib/mixlib/log.rb, line 46 def logger @logger || init end
Sets the log device to new_log_device
. Any additional loggers
that had been added to the loggers
array will be cleared.
# File lib/mixlib/log.rb, line 52 def logger=(new_log_device) reset! @logger=new_log_device end
An Array of log devices that will be logged to. Defaults to just the default @logger log device, but you can push to this array to add more devices.
# File lib/mixlib/log.rb, line 38 def loggers @loggers ||= [logger] end
Passes any other method calls on directly to the underlying Logger object created with init. If this method gets hit before a call to Mixlib::Logger.init has been made, it will call Mixlib::Logger.init() with no arguments.
# File lib/mixlib/log.rb, line 144 def method_missing(method_symbol, *args, &block) loggers.each {|l| l.send(method_symbol, *args, &block) } end
# File lib/mixlib/log.rb, line 32 def reset! @logger, @loggers = nil, nil end
# File lib/mixlib/log.rb, line 57 def use_log_devices(other) if other.respond_to?(:loggers) && other.respond_to?(:logger) @loggers = other.loggers @logger = other.logger elsif other.kind_of?(Array) @loggers = other @logger = other.first else msg = "#use_log_devices takes a Mixlib::Log object or array of log devices. " << "You gave: #{other.inspect}" raise ArgumentError, msg end end
Private Instance Methods
# File lib/mixlib/log.rb, line 150 def logger_for(*opts) if opts.empty? Logger.new(STDOUT) elsif LEVELS.keys.inject(true) {|quacks, level| quacks && opts.first.respond_to?(level)} opts.first else Logger.new(*opts) end end