The log will now queue any log messages created when there is no destination, and will flush the queue when a destination is added.
Signed-off-by: Nick Lewis <[email protected]> --- lib/puppet/util/log.rb | 17 +++++++++++++++++ spec/unit/util/log_spec.rb | 6 ++++++ spec/unit/util/logging_spec.rb | 6 ++++++ 3 files changed, 29 insertions(+), 0 deletions(-) diff --git a/lib/puppet/util/log.rb b/lib/puppet/util/log.rb index ba23e12..64a8d14 100644 --- a/lib/puppet/util/log.rb +++ b/lib/puppet/util/log.rb @@ -31,6 +31,8 @@ class Puppet::Util::Log @destinations = {} + @queued = [] + class << self include Puppet::Util include Puppet::Util::ClassGen @@ -145,6 +147,7 @@ class Puppet::Util::Log else @destinations[dest] = type.new() end + flushqueue rescue => detail if Puppet[:debug] puts detail.backtrace @@ -167,6 +170,8 @@ class Puppet::Util::Log return end + queuemessage(msg) if @destinations.count == 0 + @destinations.each do |name, dest| threadlock(dest) do dest.handle(msg) @@ -174,6 +179,18 @@ class Puppet::Util::Log end end + def Log.queuemessage(msg) + @queued.push(msg) + end + + def Log.flushqueue + return unless @destinations.size >= 1 + @queued.each do |msg| + Log.newmessage(msg) + end + @queued.clear + end + def Log.sendlevel?(level) @levels.index(level) >= @loglevel end diff --git a/spec/unit/util/log_spec.rb b/spec/unit/util/log_spec.rb index 7aaa580..c72078f 100755 --- a/spec/unit/util/log_spec.rb +++ b/spec/unit/util/log_spec.rb @@ -84,6 +84,12 @@ describe Puppet::Util::Log do Puppet::Util::Log.new(:level => :notice, :message => :foo).message.should == "foo" end + it "should write queued logs when the first destination is specified" do + Hash.any_instance.stubs(:[]=) + Puppet::Util::Log.expects(:flushqueue) + Puppet::Util::Log.newdestination(:console) + end + it "should convert the level to a symbol if it's passed in as a string" do Puppet::Util::Log.new(:level => "notice", :message => :foo).level.should == :notice end diff --git a/spec/unit/util/logging_spec.rb b/spec/unit/util/logging_spec.rb index aee308e..41b07d4 100755 --- a/spec/unit/util/logging_spec.rb +++ b/spec/unit/util/logging_spec.rb @@ -40,6 +40,12 @@ describe Puppet::Util::Logging do @logger.notice "foo" end + it "should queue logs sent without a specified destination" do + Puppet::Util::Log.expects(:queuemessage) + + @logger.notice "foo" + end + it "should use the path of any provided resource type" do resource = Puppet::Type.type(:mount).new :name => "foo" -- 1.7.1 -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
