summaryrefslogtreecommitdiffstats
path: root/lib/puppet/log.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/log.rb')
-rw-r--r--lib/puppet/log.rb115
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=""
+GREEN=""
+YELLOW=""
+SLATE=""
+ORANGE=""
+BLUE=""
+RESET=""
+
+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
#------------------------------------------------------------