This is not a solution to the problem but just an idea
and how I quickly solved it. I am sure there are more
elegant ways of doing it.

Signed-off-by: James Turnbull <[email protected]>
---
 lib/puppet/util.rb              |    7 ++++---
 lib/puppet/util/plugins.rb      |    5 +++++
 lib/puppet/util/plugins/json.rb |   13 +++++++++++++
 3 files changed, 22 insertions(+), 3 deletions(-)
 create mode 100644 lib/puppet/util/plugins.rb
 create mode 100644 lib/puppet/util/plugins/json.rb

diff --git a/lib/puppet/util.rb b/lib/puppet/util.rb
index 850d147..cc0593d 100644
--- a/lib/puppet/util.rb
+++ b/lib/puppet/util.rb
@@ -28,16 +28,16 @@ module Util
     end
   end
 
-  
+
   def self.synchronize_on(x,type)
     sync_object,users = 0,1
     begin
-      @@sync_objects.synchronize { 
+      @@sync_objects.synchronize {
         (@@sync_objects[x] ||= [Sync.new,0])[users] += 1
       }
       @@sync_objects[x][sync_object].synchronize(type) { yield }
     ensure
-      @@sync_objects.synchronize { 
+      @@sync_objects.synchronize {
         @@sync_objects.delete(x) unless (@@sync_objects[x][users] -= 1) > 0
       }
     end
@@ -462,3 +462,4 @@ require 'puppet/util/execution'
 require 'puppet/util/logging'
 require 'puppet/util/package'
 require 'puppet/util/warnings'
+require 'puppet/util/plugins'
diff --git a/lib/puppet/util/plugins.rb b/lib/puppet/util/plugins.rb
new file mode 100644
index 0000000..ace2662
--- /dev/null
+++ b/lib/puppet/util/plugins.rb
@@ -0,0 +1,5 @@
+require 'rubygems'
+Gem.find_files('puppet/util/plugins/*.rb').each do |f|
+  puts "#{f}"
+  require f
+end
diff --git a/lib/puppet/util/plugins/json.rb b/lib/puppet/util/plugins/json.rb
new file mode 100644
index 0000000..18a99c2
--- /dev/null
+++ b/lib/puppet/util/plugins/json.rb
@@ -0,0 +1,13 @@
+# Adds json formatted ouput for Puppet applications.
+# Usage: puppet agent --logdest json
+# Currently there's no way to load this as a plugin, see #4248. Appending this
+# method to puppet/util/log/destinations.rb works. Meh.
+# Would also be nice if Puppet::Util::Log had an #attributes method for 
+# accessors instead of instance_variable hacks.
+Puppet::Util::Log.newdesttype :json do
+  def handle(msg)
+    message = {}
+    msg.instance_variables.each {|v| message[v.sub("@","")] = 
msg.instance_variable_get(v) }
+    puts message.to_pson
+  end
+end
-- 
1.7.3.5

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