Class | MCollective::Log |
In: |
lib/mcollective/log.rb
|
Parent: | Object |
A simple class that allows logging at various levels.
VALID_LEVELS | = | [:error, :fatal, :debug, :warn, :info] |
# File lib/mcollective/log.rb, line 55 55: def check_level(level) 56: raise "Unknown log level" unless valid_level?(level) 57: end
# File lib/mcollective/log.rb, line 49 49: def config_and_check_level(level) 50: configure unless @configured 51: check_level(level) 52: @logger.should_log?(level) 53: end
configures the logger class, if the config has not yet been loaded we default to the console logging class and do not set @configured so that future calls to the log method will keep attempting to configure the logger till we eventually get a logging preference from the config module
# File lib/mcollective/log.rb, line 129 129: def configure(logger=nil) 130: unless logger 131: logger_type = "console" 132: 133: config = Config.instance 134: 135: if config.configured 136: logger_type = config.logger_type 137: @configured = true 138: end 139: 140: require "mcollective/logger/%s_logger" % logger_type.downcase 141: 142: logger_class = MCollective::Logger.const_get("%s_logger" % logger_type.capitalize) 143: 144: set_logger(logger_class.new) 145: else 146: set_logger(logger) 147: @configured = true 148: end 149: 150: 151: @logger.start 152: rescue Exception => e 153: @configured = false 154: STDERR.puts "Could not start logger: #{e.class} #{e}" 155: end
figures out the filename that called us
# File lib/mcollective/log.rb, line 163 163: def from 164: from = File.basename(caller[2]) 165: end
handle old code that relied on this class being a singleton
# File lib/mcollective/log.rb, line 40 40: def instance 41: self 42: end
logs a message at a certain level
# File lib/mcollective/log.rb, line 105 105: def log(level, msg, origin=nil) 106: return unless config_and_check_level(level) 107: 108: origin = from unless origin 109: 110: if @logger 111: @logger.log(level, origin, msg) 112: else 113: t = Time.new.strftime("%H:%M:%S") 114: 115: STDERR.puts "#{t}: #{level}: #{origin}: #{msg}" 116: end 117: end
# File lib/mcollective/log.rb, line 67 67: def logexception(msgid, level, e, backtrace=false, args={}) 68: return false unless config_and_check_level(level) 69: 70: origin = File.basename(e.backtrace[1]) 71: 72: if e.is_a?(CodedError) 73: msg = "%s: %s" % [e.code, e.to_s] 74: else 75: error_string = "%s: %s" % [e.class, e.to_s] 76: msg = message_for(msgid, args.merge(:error => error_string)) 77: end 78: 79: log(level, msg, origin) 80: 81: if backtrace 82: e.backtrace.each do |line| 83: log(level, "%s: %s" % [msgid, line], origin) 84: end 85: end 86: end
Logs a message at a certain level, the message must be a token that will be looked up from the i18n localization database
Messages can interprolate strings from the args hash, a message with "foo %{bar}" in the localization database will use args[:bar] for the value there, the interprolation is handled by the i18n library itself
# File lib/mcollective/log.rb, line 96 96: def logmsg(msgid, default, level, args={}) 97: return false unless config_and_check_level(level) 98: 99: msg = message_for(msgid, {:default => default}.merge(args)) 100: 101: log(level, msg) 102: end
# File lib/mcollective/log.rb, line 63 63: def message_for(msgid, args={}) 64: "%s: %s" % [msgid, Util.t(msgid, args)] 65: end
# File lib/mcollective/log.rb, line 157 157: def unconfigure 158: @configured = false 159: set_logger(nil) 160: end