diff options
Diffstat (limited to 'lib/puppet/log.rb')
-rw-r--r-- | lib/puppet/log.rb | 115 |
1 files changed, 106 insertions, 9 deletions
diff --git a/lib/puppet/log.rb b/lib/puppet/log.rb index e9d2066f9..9cfb80193 100644 --- a/lib/puppet/log.rb +++ b/lib/puppet/log.rb @@ -1,29 +1,125 @@ # $Id$ +PINK="[0;31m" +GREEN="[0;32m" +YELLOW="[0;33m" +SLATE="[0;34m" +ORANGE="[0;35m" +BLUE="[0;36m" +RESET="[0m" + +require 'syslog' + module Puppet #------------------------------------------------------------ # provide feedback of various types to the user # modeled after syslog messages # each level of message prints in a different color - class Message + class Log @@messages = Array.new + + @@levels = [:debug,:info,:notice,:warning,:err,:alert,:emerg,:crit] + @@loglevel = :notice + @@logdest = :console + @@colors = { :debug => SLATE, :info => ORANGE, :notice => PINK, :warning => GREEN, :err => YELLOW, - :alert => RESET, + :alert => BLUE, :emerg => RESET, :crit => RESET } - attr_accessor :level, :message, :source + def Log.close + if defined? @@logfile + @@logfile.close + @@logfile = nil + end + + if defined? @@syslog + @@syslog = nil + end + end + + def Log.create(level,*ary) + msg = ary.join(" ") + + if @@levels.index(@@loglevel) >= @@levels.index(level) + Puppet::Log.new( + :level => level, + :source => "Puppet", + :message => msg + ) + end + end + + def Log.levels + return @@levels.dup + end + + def Log.destination(dest) + if dest == "syslog" || dest == :syslog + unless defined? @@syslog + @@syslog = Syslog.open("puppet") + end + @@logdest = :syslog + elsif dest =~ /^\// + if defined? @@logfile + @@logfile.close + end + begin + @@logfile = File.open(dest,"w") + rescue => detail + raise + end + @@logdest = :file + else + @@logdest = :console + end + end + + def Log.level(level) + unless level.is_a?(Symbol) + level = level.intern + end + + unless @@loglevels.include?(level) + raise "Invalid loglevel %s" % level + end + + @@loglevel = @@loglevels.index(level) + end + + def Log.newmessage(msg) + case @@logdest + when :syslog: + if msg.source == "Puppet" + @@syslog.send(msg.level,msg.to_s) + else + @@syslog.send(msg.level,"(%s) %s" % [msg.source,msg.to_s]) + end + when :file: + unless defined? @@logfile + raise "Log file must be defined before we can log to it" + end + @@logfile.puts("%s %s (%s): %s" % + [msg.time,msg.source,msg.level,msg.to_s]) + else + puts @@colors[msg.level] + "%s (%s): %s" % [ + msg.source, msg.level, msg.to_s + ] + RESET + end + end + + attr_accessor :level, :message, :source, :time def initialize(args) unless args.include?(:level) && args.include?(:message) && args.include?(:source) - raise "Puppet::Message called incorrectly" + raise "Puppet::Log called incorrectly" end if args[:level].class == String @@ -34,7 +130,7 @@ module Puppet raise "Level is not a string or symbol: #{args[:level].class}" end @message = args[:message] - @source = args[:source] + @source = args[:source] || "Puppet" @time = Time.now # this should include the host name, and probly lots of other # stuff, at some point @@ -42,8 +138,8 @@ module Puppet raise "Invalid message level #{level}" end + Log.newmessage(self) @@messages.push(self) - Puppet.newmessage(self) end def to_s @@ -53,9 +149,10 @@ module Puppet #return @@colors[@level] + "%s %s (%s): %s" % [ # @time, @source, @level, @message #] + RESET - return @@colors[@level] + "%s (%s): %s" % [ - @source, @level, @message - ] + RESET + return @message + #return @@colors[@level] + "%s (%s): %s" % [ + # @source, @level, @message + #] + RESET end end #------------------------------------------------------------ |