Apologies, this is actually for ticket #4114. I've amended the commit message.

On Jul 6, 2010, at 1:36 PM, Nick Lewis wrote:

> 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.
> 

-- 
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.

Reply via email to