summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util/log.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/util/log.rb')
-rw-r--r--lib/puppet/util/log.rb416
1 files changed, 208 insertions, 208 deletions
diff --git a/lib/puppet/util/log.rb b/lib/puppet/util/log.rb
index c47aa0d6f..36a765c61 100644
--- a/lib/puppet/util/log.rb
+++ b/lib/puppet/util/log.rb
@@ -5,250 +5,250 @@ require 'puppet/util/classgen'
# expected that that will be the most common log destination. Supports
# multiple destinations, one of which is a remote server.
class Puppet::Util::Log
- include Puppet::Util
- extend Puppet::Util::ClassGen
- include Puppet::Util::Tagging
+ include Puppet::Util
+ extend Puppet::Util::ClassGen
+ include Puppet::Util::Tagging
- @levels = [:debug,:info,:notice,:warning,:err,:alert,:emerg,:crit]
- @loglevel = 2
+ @levels = [:debug,:info,:notice,:warning,:err,:alert,:emerg,:crit]
+ @loglevel = 2
- @desttypes = {}
+ @desttypes = {}
- # Create a new destination type.
- def self.newdesttype(name, options = {}, &block)
+ # Create a new destination type.
+ def self.newdesttype(name, options = {}, &block)
- dest = genclass(
- name, :parent => Puppet::Util::Log::Destination, :prefix => "Dest",
- :block => block,
- :hash => @desttypes,
+ dest = genclass(
+ name, :parent => Puppet::Util::Log::Destination, :prefix => "Dest",
+ :block => block,
+ :hash => @desttypes,
- :attributes => options
- )
- dest.match(dest.name)
-
- dest
- end
+ :attributes => options
+ )
+ dest.match(dest.name)
- require 'puppet/util/log/destination'
- require 'puppet/util/log/destinations'
+ dest
+ end
- @destinations = {}
+ require 'puppet/util/log/destination'
+ require 'puppet/util/log/destinations'
- @queued = []
+ @destinations = {}
- class << self
- include Puppet::Util
- include Puppet::Util::ClassGen
-
- attr_reader :desttypes
- end
-
- # Reset log to basics. Basically just flushes and closes files and
- # undefs other objects.
- def Log.close(destination)
- if @destinations.include?(destination)
- @destinations[destination].flush if @destinations[destination].respond_to?(:flush)
- @destinations[destination].close if @destinations[destination].respond_to?(:close)
- @destinations.delete(destination)
- end
- end
-
- def self.close_all
- destinations.keys.each { |dest|
- close(dest)
- }
- end
-
- # Flush any log destinations that support such operations.
- def Log.flush
- @destinations.each { |type, dest|
- dest.flush if dest.respond_to?(:flush)
- }
- end
-
- # Create a new log message. The primary role of this method is to
- # avoid creating log messages below the loglevel.
- def Log.create(hash)
- raise Puppet::DevError, "Logs require a level" unless hash.include?(:level)
- raise Puppet::DevError, "Invalid log level #{hash[:level]}" unless @levels.index(hash[:level])
- @levels.index(hash[:level]) >= @loglevel ? Puppet::Util::Log.new(hash) : nil
- end
-
- def Log.destinations
- @destinations
- end
-
- # Yield each valid level in turn
- def Log.eachlevel
- @levels.each { |level| yield level }
- end
+ @queued = []
- # Return the current log level.
- def Log.level
- @levels[@loglevel]
+ class << self
+ include Puppet::Util
+ include Puppet::Util::ClassGen
+
+ attr_reader :desttypes
+ end
+
+ # Reset log to basics. Basically just flushes and closes files and
+ # undefs other objects.
+ def Log.close(destination)
+ if @destinations.include?(destination)
+ @destinations[destination].flush if @destinations[destination].respond_to?(:flush)
+ @destinations[destination].close if @destinations[destination].respond_to?(:close)
+ @destinations.delete(destination)
end
-
- # Set the current log level.
- def Log.level=(level)
- level = level.intern unless level.is_a?(Symbol)
-
- raise Puppet::DevError, "Invalid loglevel #{level}" unless @levels.include?(level)
-
- @loglevel = @levels.index(level)
+ end
+
+ def self.close_all
+ destinations.keys.each { |dest|
+ close(dest)
+ }
+ end
+
+ # Flush any log destinations that support such operations.
+ def Log.flush
+ @destinations.each { |type, dest|
+ dest.flush if dest.respond_to?(:flush)
+ }
+ end
+
+ # Create a new log message. The primary role of this method is to
+ # avoid creating log messages below the loglevel.
+ def Log.create(hash)
+ raise Puppet::DevError, "Logs require a level" unless hash.include?(:level)
+ raise Puppet::DevError, "Invalid log level #{hash[:level]}" unless @levels.index(hash[:level])
+ @levels.index(hash[:level]) >= @loglevel ? Puppet::Util::Log.new(hash) : nil
+ end
+
+ def Log.destinations
+ @destinations
+ end
+
+ # Yield each valid level in turn
+ def Log.eachlevel
+ @levels.each { |level| yield level }
+ end
+
+ # Return the current log level.
+ def Log.level
+ @levels[@loglevel]
+ end
+
+ # Set the current log level.
+ def Log.level=(level)
+ level = level.intern unless level.is_a?(Symbol)
+
+ raise Puppet::DevError, "Invalid loglevel #{level}" unless @levels.include?(level)
+
+ @loglevel = @levels.index(level)
+ end
+
+ def Log.levels
+ @levels.dup
+ end
+
+ # Create a new log destination.
+ def Log.newdestination(dest)
+ # Each destination can only occur once.
+ if @destinations.find { |name, obj| obj.name == dest }
+ return
end
- def Log.levels
- @levels.dup
+ name, type = @desttypes.find do |name, klass|
+ klass.match?(dest)
end
- # Create a new log destination.
- def Log.newdestination(dest)
- # Each destination can only occur once.
- if @destinations.find { |name, obj| obj.name == dest }
- return
- end
-
- name, type = @desttypes.find do |name, klass|
- klass.match?(dest)
- end
-
- raise Puppet::DevError, "Unknown destination type #{dest}" unless type
-
- begin
- if type.instance_method(:initialize).arity == 1
- @destinations[dest] = type.new(dest)
- else
- @destinations[dest] = type.new
- end
- flushqueue
- @destinations[dest]
- rescue => detail
- puts detail.backtrace if Puppet[:debug]
-
- # If this was our only destination, then add the console back in.
- newdestination(:console) if @destinations.empty? and (dest != :console and dest != "console")
- end
+ raise Puppet::DevError, "Unknown destination type #{dest}" unless type
+
+ begin
+ if type.instance_method(:initialize).arity == 1
+ @destinations[dest] = type.new(dest)
+ else
+ @destinations[dest] = type.new
+ end
+ flushqueue
+ @destinations[dest]
+ rescue => detail
+ puts detail.backtrace if Puppet[:debug]
+
+ # If this was our only destination, then add the console back in.
+ newdestination(:console) if @destinations.empty? and (dest != :console and dest != "console")
end
+ end
- # Route the actual message. FIXME There are lots of things this method
- # should do, like caching and a bit more. It's worth noting that there's
- # a potential for a loop here, if the machine somehow gets the destination set as
- # itself.
- def Log.newmessage(msg)
- return if @levels.index(msg.level) < @loglevel
+ # Route the actual message. FIXME There are lots of things this method
+ # should do, like caching and a bit more. It's worth noting that there's
+ # a potential for a loop here, if the machine somehow gets the destination set as
+ # itself.
+ def Log.newmessage(msg)
+ return if @levels.index(msg.level) < @loglevel
- queuemessage(msg) if @destinations.length == 0
-
- @destinations.each do |name, dest|
- threadlock(dest) do
- dest.handle(msg)
- end
- end
- end
-
- def Log.queuemessage(msg)
- @queued.push(msg)
- end
+ queuemessage(msg) if @destinations.length == 0
- def Log.flushqueue
- return unless @destinations.size >= 1
- @queued.each do |msg|
- Log.newmessage(msg)
- end
- @queued.clear
+ @destinations.each do |name, dest|
+ threadlock(dest) do
+ dest.handle(msg)
+ end
end
+ end
- def Log.sendlevel?(level)
- @levels.index(level) >= @loglevel
- end
+ def Log.queuemessage(msg)
+ @queued.push(msg)
+ end
- # Reopen all of our logs.
- def Log.reopen
- Puppet.notice "Reopening log files"
- types = @destinations.keys
- @destinations.each { |type, dest|
- dest.close if dest.respond_to?(:close)
- }
- @destinations.clear
- # We need to make sure we always end up with some kind of destination
- begin
- types.each { |type|
- Log.newdestination(type)
- }
- rescue => detail
- if @destinations.empty?
- Log.newdestination(:syslog)
- Puppet.err detail.to_s
- end
- end
+ def Log.flushqueue
+ return unless @destinations.size >= 1
+ @queued.each do |msg|
+ Log.newmessage(msg)
end
-
- # Is the passed level a valid log level?
- def self.validlevel?(level)
- @levels.include?(level)
+ @queued.clear
+ end
+
+ def Log.sendlevel?(level)
+ @levels.index(level) >= @loglevel
+ end
+
+ # Reopen all of our logs.
+ def Log.reopen
+ Puppet.notice "Reopening log files"
+ types = @destinations.keys
+ @destinations.each { |type, dest|
+ dest.close if dest.respond_to?(:close)
+ }
+ @destinations.clear
+ # We need to make sure we always end up with some kind of destination
+ begin
+ types.each { |type|
+ Log.newdestination(type)
+ }
+ rescue => detail
+ if @destinations.empty?
+ Log.newdestination(:syslog)
+ Puppet.err detail.to_s
+ end
end
+ end
- attr_accessor :time, :remote, :file, :line, :version, :source
- attr_reader :level, :message
-
- def initialize(args)
- self.level = args[:level]
- self.message = args[:message]
- self.source = args[:source] || "Puppet"
-
- @time = Time.now
+ # Is the passed level a valid log level?
+ def self.validlevel?(level)
+ @levels.include?(level)
+ end
- if tags = args[:tags]
- tags.each { |t| self.tag(t) }
- end
+ attr_accessor :time, :remote, :file, :line, :version, :source
+ attr_reader :level, :message
- [:file, :line, :version].each do |attr|
- next unless value = args[attr]
- send(attr.to_s + "=", value)
- end
+ def initialize(args)
+ self.level = args[:level]
+ self.message = args[:message]
+ self.source = args[:source] || "Puppet"
- Log.newmessage(self)
- end
+ @time = Time.now
- def message=(msg)
- raise ArgumentError, "Puppet::Util::Log requires a message" unless msg
- @message = msg.to_s
+ if tags = args[:tags]
+ tags.each { |t| self.tag(t) }
end
- def level=(level)
- raise ArgumentError, "Puppet::Util::Log requires a log level" unless level
- @level = level.to_sym
- raise ArgumentError, "Invalid log level #{@level}" unless self.class.validlevel?(@level)
-
- # Tag myself with my log level
- tag(level)
+ [:file, :line, :version].each do |attr|
+ next unless value = args[attr]
+ send(attr.to_s + "=", value)
end
- # If they pass a source in to us, we make sure it is a string, and
- # we retrieve any tags we can.
- def source=(source)
- if source.respond_to?(:source_descriptors)
- descriptors = source.source_descriptors
- @source = descriptors[:path]
-
- descriptors[:tags].each { |t| tag(t) }
-
- [:file, :line, :version].each do |param|
- next unless descriptors[param]
- send(param.to_s + "=", descriptors[param])
- end
- else
- @source = source.to_s
- end
+ Log.newmessage(self)
+ end
+
+ def message=(msg)
+ raise ArgumentError, "Puppet::Util::Log requires a message" unless msg
+ @message = msg.to_s
+ end
+
+ def level=(level)
+ raise ArgumentError, "Puppet::Util::Log requires a log level" unless level
+ @level = level.to_sym
+ raise ArgumentError, "Invalid log level #{@level}" unless self.class.validlevel?(@level)
+
+ # Tag myself with my log level
+ tag(level)
+ end
+
+ # If they pass a source in to us, we make sure it is a string, and
+ # we retrieve any tags we can.
+ def source=(source)
+ if source.respond_to?(:source_descriptors)
+ descriptors = source.source_descriptors
+ @source = descriptors[:path]
+
+ descriptors[:tags].each { |t| tag(t) }
+
+ [:file, :line, :version].each do |param|
+ next unless descriptors[param]
+ send(param.to_s + "=", descriptors[param])
+ end
+ else
+ @source = source.to_s
end
+ end
- def to_report
- "#{time} #{source} (#{level}): #{to_s}"
- end
+ def to_report
+ "#{time} #{source} (#{level}): #{to_s}"
+ end
- def to_s
- message
- end
+ def to_s
+ message
+ end
end
# This is for backward compatibility from when we changed the constant to Puppet::Util::Log