Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / lib / mcollective / logger / console_logger.rb
diff --git a/lib/mcollective/logger/console_logger.rb b/lib/mcollective/logger/console_logger.rb
new file mode 100644 (file)
index 0000000..9d5b8ea
--- /dev/null
@@ -0,0 +1,59 @@
+module MCollective
+  module Logger
+    # Implements a syslog based logger using the standard ruby syslog class
+    class Console_logger<Base
+      def start
+        set_level(:info)
+
+        config = Config.instance
+        set_level(config.loglevel.to_sym) if config.configured
+      end
+
+      def set_logging_level(level)
+        # nothing to do here, we ignore high levels when we log
+      end
+
+      def valid_levels
+        {:info  => :info,
+         :warn  => :warning,
+         :debug => :debug,
+         :fatal => :crit,
+         :error => :err}
+      end
+
+      def log(level, from, msg, normal_output=STDERR, last_resort_output=STDERR)
+        time = Time.new.strftime("%Y/%m/%d %H:%M:%S")
+
+        normal_output.puts("%s %s: %s %s" % [colorize(level, level), time, from, msg])
+      rescue
+        # if this fails we probably cant show the user output at all,
+        # STDERR it as last resort
+        last_resort_output.puts("#{level}: #{msg}")
+      end
+
+      # Set some colors for various logging levels, will honor the
+      # color configuration option and return nothing if its configured
+      # not to
+      def color(level)
+        colorize = Config.instance.color
+
+        colors = {:error => Util.color(:red),
+                  :fatal => Util.color(:red),
+                  :warn  => Util.color(:yellow),
+                  :info  => Util.color(:green),
+                  :reset => Util.color(:reset)}
+
+        if colorize
+          return colors[level] || ""
+        else
+          return ""
+        end
+      end
+
+      # Helper to return a string in specific color
+      def colorize(level, msg)
+        "%s%s%s" % [ color(level), msg, color(:reset) ]
+      end
+    end
+  end
+end