9d5b8eac63330f64f1e3f36baba93859c259d758
[packages/precise/mcollective.git] / lib / mcollective / logger / console_logger.rb
1 module MCollective
2   module Logger
3     # Implements a syslog based logger using the standard ruby syslog class
4     class Console_logger<Base
5       def start
6         set_level(:info)
7
8         config = Config.instance
9         set_level(config.loglevel.to_sym) if config.configured
10       end
11
12       def set_logging_level(level)
13         # nothing to do here, we ignore high levels when we log
14       end
15
16       def valid_levels
17         {:info  => :info,
18          :warn  => :warning,
19          :debug => :debug,
20          :fatal => :crit,
21          :error => :err}
22       end
23
24       def log(level, from, msg, normal_output=STDERR, last_resort_output=STDERR)
25         time = Time.new.strftime("%Y/%m/%d %H:%M:%S")
26
27         normal_output.puts("%s %s: %s %s" % [colorize(level, level), time, from, msg])
28       rescue
29         # if this fails we probably cant show the user output at all,
30         # STDERR it as last resort
31         last_resort_output.puts("#{level}: #{msg}")
32       end
33
34       # Set some colors for various logging levels, will honor the
35       # color configuration option and return nothing if its configured
36       # not to
37       def color(level)
38         colorize = Config.instance.color
39
40         colors = {:error => Util.color(:red),
41                   :fatal => Util.color(:red),
42                   :warn  => Util.color(:yellow),
43                   :info  => Util.color(:green),
44                   :reset => Util.color(:reset)}
45
46         if colorize
47           return colors[level] || ""
48         else
49           return ""
50         end
51       end
52
53       # Helper to return a string in specific color
54       def colorize(level, msg)
55         "%s%s%s" % [ color(level), msg, color(:reset) ]
56       end
57     end
58   end
59 end