| 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